diff --git a/app/Base.java b/app/Base.java
index ce53924f2..95f26906f 100644
--- a/app/Base.java
+++ b/app/Base.java
@@ -1,1113 +1,1113 @@
-/* -*- mode: jde; c-basic-offset: 2; indent-tabs-mode: nil -*- */
-
-/*
- Part of the Arduino project - http://arduino.berlios.de
-
-
-
- Based on processing http://www.processing.org
- Copyright (c) 2004-05 Ben Fry and Casey Reas
- Copyright (c) 2001-04 Massachusetts Institute of Technology
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-*/
-
-package processing.app;
-
-import java.awt.*;
-import java.awt.event.*;
-import java.io.*;
-import java.lang.reflect.*;
-import java.net.*;
-import java.util.*;
-import java.util.zip.*;
-
-import javax.swing.*;
-import javax.swing.event.*;
-import javax.swing.text.*;
-import javax.swing.undo.*;
-
-import com.apple.mrj.*;
-import com.ice.jni.registry.*;
-
-
-
-/**
- * The base class for the main Arduino application.
- *
- * Primary role of this class is for platform identification and
- * general interaction with the system (launching URLs, loading
- * files and images, etc) that comes from that.
- */
-public class Base {
- static final int VERSION = 3;
- static final String VERSION_NAME = "0003 Alpha";
-
- static public int platform;
-
- // platform IDs for platform
-
- static final int WINDOWS = 1;
- static final int MACOS9 = 2;
- static final int MACOSX = 3;
- static final int LINUX = 4;
- static final int OTHER = 0;
-
-
- // moved from PApplet
- // in preperation of detaching the IDE from the
- // Arduino core classes
-
- /**
- * Current platform in use.
- *
- * Equivalent to System.getProperty("os.name"), just used internally.
- */
- static public String platformName = System.getProperty("os.name");
-
- static {
- // figure out which operating system
- // this has to be first, since editor needs to know
-
- if (platformName.toLowerCase().indexOf("mac") != -1) {
- // can only check this property if running on a mac
- // on a pc it throws a security exception and kills the applet
- // (but on the mac it does just fine)
- if (System.getProperty("mrj.version") != null) { // running on a mac
- platform = (platformName.equals("Mac OS X")) ?
- MACOSX : MACOS9;
- }
-
- } else {
- String osname = System.getProperty("os.name");
-
- if (osname.indexOf("Windows") != -1) {
- platform = WINDOWS;
-
- } else if (osname.equals("Linux")) { // true for the ibm vm
- platform = LINUX;
-
- } else {
- platform = OTHER;
- }
- }
- }
-
- // used by split, all the standard whitespace chars
- // (uncludes unicode nbsp, that little bostage)
-
- static final String WHITESPACE = " \t\n\r\f\u00A0";
-
-
-
-
- /**
- * Path of filename opened on the command line,
- * or via the MRJ open document handler.
- */
- static String openedAtStartup;
-
- Editor editor;
-
-
- static public void main(String args[]) {
-
- // make sure that this is running on java 1.4
-
- //if (PApplet.javaVersion < 1.4f) {
- //System.err.println("no way man");
- // Base.showError("Need to install Java 1.4",
- // "This version of Arduino requires \n" +
- // "Java 1.4 or later to run properly.\n" +
- // "Please visit java.com to upgrade.", null);
- // }
-
-
- // grab any opened file from the command line
-
- if (args.length == 1) {
- Base.openedAtStartup = args[0];
- }
-
-
- // register a temporary/early version of the mrj open document handler,
- // because the event may be lost (sometimes, not always) by the time
- // that Editor is properly constructed.
-
- MRJOpenDocumentHandler startupOpen = new MRJOpenDocumentHandler() {
- public void handleOpenFile(File file) {
- // this will only get set once.. later will be handled
- // by the Editor version of this fella
- if (Base.openedAtStartup == null) {
- //System.out.println("handling outside open file: " + file);
- Base.openedAtStartup = file.getAbsolutePath();
- }
- }
- };
- MRJApplicationUtils.registerOpenDocumentHandler(startupOpen);
-
- Base app = new Base();
- }
-
-
- public Base() {
-
- // set the look and feel before opening the window
-
- try {
- if (Base.isLinux()) {
- // linux is by default (motif?) even uglier than metal
- // actually, i'm using native menus, so they're ugly and
- // motif-looking. ick. need to fix this.
- UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
- } else {
- UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
-
- // build the editor object
- editor = new Editor();
-
- // get things rawkin
- editor.pack();
-
- // has to be here to set window size properly
- editor.restorePreferences();
-
- // show the window
- editor.show();
-
- // check for updates
- if (Preferences.getBoolean("update.check")) {
- new UpdateCheck(editor);
- }
- }
-
-
- // .................................................................
-
-
- /**
- * returns true if the Arduino is running on a Mac OS machine,
- * specifically a Mac OS X machine because it doesn't un on OS 9 anymore.
- */
- static public boolean isMacOS() {
- return platform == MACOSX;
- }
-
-
- /**
- * returns true if running on windows.
- */
- static public boolean isWindows() {
-
- return platform == WINDOWS;
- }
-
-
- /**
- * true if running on linux.
- */
- static public boolean isLinux() {
-
- return platform == LINUX;
- }
-
-
- // .................................................................
-
-
- static final int kDocumentsFolderType =
- ('d' << 24) | ('o' << 16) | ('c' << 8) | 's';
- static final int kPreferencesFolderType =
- ('p' << 24) | ('r' << 16) | ('e' << 8) | 'f';
- static final int kDomainLibraryFolderType =
- ('d' << 24) | ('l' << 16) | ('i' << 8) | 'b';
- static final short kUserDomain = -32763;
-
-
- static public File getSettingsFolder() {
- File dataFolder = null;
-
- String pref = Preferences.get("settings.path");
- if (pref != null) {
- dataFolder = new File(pref);
-
- } else if (Base.isMacOS()) {
- // carbon folder constants
- // http://developer.apple.com/documentation/Carbon/Reference
- // /Folder_Manager/folder_manager_ref/constant_6.html#/
- // /apple_ref/doc/uid/TP30000238/C006889
-
- // additional information found int the local file:
- // /System/Library/Frameworks/CoreServices.framework
- // /Versions/Current/Frameworks/CarbonCore.framework/Headers/
-
- // this is the 1.4 version.. but using 1.3 since i have the stubs
- // import com.apple.eio.*
- //println(FileManager.findFolder(kUserDomain,
- // kDomainLibraryFolderType));
-
- // not clear if i can write to this folder tho..
- try {
- /*
- if (false) {
- // this is because the mrjtoolkit stubs don't have the
- // thows exception around them
- new FileInputStream("ignored");
- }
- */
-
- // this method has to be dynamically loaded, because
- MRJOSType domainLibrary = new MRJOSType("dlib");
- Method findFolderMethod =
- MRJFileUtils.class.getMethod("findFolder",
- new Class[] { Short.TYPE,
- MRJOSType.class });
- File libraryFolder = (File)
- findFolderMethod.invoke(null, new Object[] { new Short(kUserDomain),
- domainLibrary });
-
- dataFolder = new File(libraryFolder, "Arduino");
-
- } catch (Exception e) {
- // this could be FileNotFound or NoSuchMethod
- //} catch (FileNotFoundException e) {
- //e.printStackTrace();
- //System.exit(1);
- showError("Problem getting data folder",
- "Error getting the Arduino data folder.", e);
- }
-
- } else if (Base.isWindows()) {
- // looking for Documents and Settings/blah/Application Data/Arduino
-
- // this is just based on the other documentation, and eyeballing
- // that part of the registry.. not confirmed by any msft/msdn docs.
- // HKEY_CURRENT_USER\Software\Microsoft
- // \Windows\CurrentVersion\Explorer\Shell Folders
- // Value Name: AppData
- // Value Type: REG_SZ
- // Value Data: path
-
- try {
- //RegistryKey topKey = Registry.getTopLevelKey("HKCU");
- RegistryKey topKey = Registry.HKEY_CURRENT_USER;
-
- String localKeyPath =
- "Software\\Microsoft\\Windows\\CurrentVersion" +
- "\\Explorer\\Shell Folders";
- RegistryKey localKey = topKey.openSubKey(localKeyPath);
- String appDataPath = cleanKey(localKey.getStringValue("AppData"));
- //System.out.println("app data path is " + appDataPath);
- //System.exit(0);
- //topKey.closeKey(); // necessary?
- //localKey.closeKey();
-
- dataFolder = new File(appDataPath, "Arduino");
-
- } catch (Exception e) {
- showError("Problem getting data folder",
- "Error getting the Arduino data folder.", e);
- }
- //return null;
-
- } else {
- // otherwise make a .arduino directory int the user's home dir
- File home = new File(System.getProperty("user.home"));
- dataFolder = new File(home, ".arduino");
- }
-
- // create the folder if it doesn't exist already
- boolean result = true;
- if (!dataFolder.exists()) {
- result = dataFolder.mkdirs();
- }
-
- if (!result) {
- // try the fallback location
- System.out.println("Using fallback path for settings.");
- String fallback = Preferences.get("settings.path.fallback");
- dataFolder = new File(fallback);
- if (!dataFolder.exists()) {
- result = dataFolder.mkdirs();
- }
- }
-
- if (!result) {
- showError("Settings issues",
- "Arduino cannot run because it could not\n" +
- "create a folder to store your settings.", null);
- }
-
- return dataFolder;
- }
-
-
- static public File getSettingsFile(String filename) {
- return new File(getSettingsFolder(), filename);
- }
-
-
- static public File getBuildFolder() {
- String buildPath = Preferences.get("build.path");
- if (buildPath != null) return new File(buildPath);
-
- File folder = new File(getTempFolder(), "build");
- if (!folder.exists()) folder.mkdirs();
- return folder;
- }
-
-
- /**
- * Get the path to the platform's temporary folder, by creating
- * a temporary temporary file and getting its parent folder.
- */
- static public File getTempFolder() {
- try {
- File ignored = File.createTempFile("ignored", null);
- String tempPath = ignored.getParent();
- ignored.delete();
- return new File(tempPath);
-
- } catch (Exception e) {
- e.printStackTrace();
- }
- return null; // TODO could we *really* ever reach this?
- }
-
-
- /*
- static public void addBuildFolderToClassPath() {
- String path = getBuildFolder().getAbsolutePath();
- String jcp = System.getProperty("java.class.path");
- if (jcp.indexOf(path) == -1) {
- System.setProperty("java.class.path", path + File.pathSeparator + jcp);
- //return new File(getProcessingDataFolder(), "build");
- System.out.println("jcp is now " +
- System.getProperty("java.class.path"));
- }
- }
- */
-
-
- static public File getDefaultSketchbookFolder() {
- File sketchbookFolder = null;
-
- if (Base.isMacOS()) {
- // looking for /Users/blah/Documents/Arduino
-
- // carbon folder constants
- // http://developer.apple.com/documentation/Carbon/Reference/Folder_Manager/folder_manager_ref/constant_6.html#//apple_ref/doc/uid/TP30000238/C006889
-
- // additional information found int the local file:
- // /System/Library/Frameworks/CoreServices.framework/Versions/Current/Frameworks/CarbonCore.framework/Headers/
-
- // this is the 1.4 version.. but using 1.3 since i have the stubs
- // import com.apple.eio.*
- //println(FileManager.findFolder(kUserDomain,
- // kDomainLibraryFolderType));
-
- // not clear if i can write to this folder tho..
- try {
- MRJOSType domainDocuments = new MRJOSType("docs");
- //File libraryFolder = MRJFileUtils.findFolder(domainDocuments);
-
- // for 77, try switching this to the user domain, just to be sure
- Method findFolderMethod =
- MRJFileUtils.class.getMethod("findFolder",
- new Class[] { Short.TYPE,
- MRJOSType.class });
- File documentsFolder = (File)
- findFolderMethod.invoke(null, new Object[] { new Short(kUserDomain),
- domainDocuments });
- sketchbookFolder = new File(documentsFolder, "Arduino");
-
- } catch (Exception e) {
- showError("sketch folder problem",
- "Could not locate default sketch folder location.", e);
- }
-
- } else if (isWindows()) {
- // looking for Documents and Settings/blah/My Documents/Arduino
- // (though using a reg key since it's different on other platforms)
-
- // http://support.microsoft.com/?kbid=221837&sd=RMVP
- // The path to the My Documents folder is stored in the
- // following registry key, where path is the complete path
- // to your storage location:
- // HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
- // Value Name: Personal
- // Value Type: REG_SZ
- // Value Data: path
-
- try {
- RegistryKey topKey = Registry.HKEY_CURRENT_USER;
-
- String localKeyPath =
- "Software\\Microsoft\\Windows\\CurrentVersion" +
- "\\Explorer\\Shell Folders";
- RegistryKey localKey = topKey.openSubKey(localKeyPath);
- String personalPath = cleanKey(localKey.getStringValue("Personal"));
- //topKey.closeKey(); // necessary?
- //localKey.closeKey();
- sketchbookFolder = new File(personalPath, "Arduino");
-
- } catch (Exception e) {
- showError("Problem getting documents folder",
- "Error getting the Arduino sketchbook folder.", e);
- }
-
- } else {
- // on linux (or elsewhere?) prompt the user for the location
- JFileChooser fc = new JFileChooser();
- fc.setDialogTitle("Select the folder where " +
- "Arduino programs should be stored...");
- //fc.setSelectedFile(new File(sketchbookLocationField.getText()));
- fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
-
- int returned = fc.showOpenDialog(new JDialog());
- if (returned == JFileChooser.APPROVE_OPTION) {
- //File file = fc.getSelectedFile();
- //sketchbookLocationField.setText(file.getAbsolutePath());
- sketchbookFolder = fc.getSelectedFile();
-
- } else {
- System.exit(0);
- }
- }
-
- // create the folder if it doesn't exist already
- boolean result = true;
- if (!sketchbookFolder.exists()) {
- result = sketchbookFolder.mkdirs();
- }
-
- if (!result) {
- // try the fallback location
- System.out.println("Using fallback path for sketchbook.");
- String fallback = Preferences.get("sketchbook.path.fallback");
- sketchbookFolder = new File(fallback);
- if (!sketchbookFolder.exists()) {
- result = sketchbookFolder.mkdirs();
- }
- }
-
- if (!result) {
- showError("error",
- "Arduino cannot run because it could not\n" +
- "create a folder to store your sketchbook.", null);
- }
-
- return sketchbookFolder;
- }
-
-
- static public String cleanKey(String what) {
- // jnireg seems to be reading the chars as bytes
- // so maybe be as simple as & 0xff and then running through decoder
-
- char c[] = what.toCharArray();
-
- // if chars are in the tooHigh range, it's prolly because
- // a byte from the jni registry was turned into a char
- // and there was a sign extension.
- // e.g. 0xFC (252, umlaut u) became 0xFFFC (65532).
- // but on a japanese system, maybe this is two-byte and ok?
- int tooHigh = 65536 - 128;
- for (int i = 0; i < c.length; i++) {
- if (c[i] >= tooHigh) c[i] &= 0xff;
-
- /*
- if ((c[i] >= 32) && (c[i] < 128)) {
- System.out.print(c[i]);
- } else {
- System.out.print("[" + PApplet.hex(c[i]) + "]");
- }
- */
- }
- //System.out.println();
- return new String(c);
- }
-
-
- // .................................................................
-
-
- /**
- * Given the reference filename from the keywords list,
- * builds a URL and passes it to openURL.
- */
- static public void showReference(String referenceFile) {
- String currentDir = System.getProperty("user.dir");
- openURL(currentDir + File.separator +
- "reference" + File.separator +
- referenceFile + ".html");
- }
-
-
- /**
- * Implements the cross-platform headache of opening URLs
- */
- static public void openURL(String url) {
- //System.out.println("opening url " + url);
- try {
- if (Base.isWindows()) {
- // this is not guaranteed to work, because who knows if the
- // path will always be c:\progra~1 et al. also if the user has
- // a different browser set as their default (which would
- // include me) it'd be annoying to be dropped into ie.
- //Runtime.getRuntime().exec("c:\\progra~1\\intern~1\\iexplore "
- // + currentDir
-
- // the following uses a shell execute to launch the .html file
- // note that under cygwin, the .html files have to be chmodded +x
- // after they're unpacked from the zip file. i don't know why,
- // and don't understand what this does in terms of windows
- // permissions. without the chmod, the command prompt says
- // "Access is denied" in both cygwin and the "dos" prompt.
- //Runtime.getRuntime().exec("cmd /c " + currentDir + "\\reference\\" +
- // referenceFile + ".html");
- if (url.startsWith("http://")) {
- // open dos prompt, give it 'start' command, which will
- // open the url properly. start by itself won't work since
- // it appears to need cmd
- Runtime.getRuntime().exec("cmd /c start " + url);
- } else {
- // just launching the .html file via the shell works
- // but make sure to chmod +x the .html files first
- // also place quotes around it in case there's a space
- // in the user.dir part of the url
- Runtime.getRuntime().exec("cmd /c \"" + url + "\"");
- }
-
- } else if (Base.isMacOS()) {
- //com.apple.eio.FileManager.openURL(url);
-
- if (!url.startsWith("http://")) {
- // prepend file:// on this guy since it's a file
- url = "file://" + url;
-
- // replace spaces with %20 for the file url
- // otherwise the mac doesn't like to open it
- // can't just use URLEncoder, since that makes slashes into
- // %2F characters, which is no good. some might say "useless"
- if (url.indexOf(' ') != -1) {
- StringBuffer sb = new StringBuffer();
- char c[] = url.toCharArray();
- for (int i = 0; i < c.length; i++) {
- if (c[i] == ' ') {
- sb.append("%20");
- } else {
- sb.append(c[i]);
- }
- }
- url = sb.toString();
- }
- }
- com.apple.mrj.MRJFileUtils.openURL(url);
-
- } else if (Base.isLinux()) {
- // how's mozilla sound to ya, laddie?
- //Runtime.getRuntime().exec(new String[] { "mozilla", url });
- String browser = Preferences.get("browser");
- Runtime.getRuntime().exec(new String[] { browser, url });
-
- } else {
- System.err.println("unspecified platform");
- }
-
- } catch (IOException e) {
- Base.showWarning("Could not open URL",
- "An error occurred while trying to open\n" + url, e);
- }
- }
-
-
- /**
- * Implements the other cross-platform headache of opening
- * a folder in the machine's native file browser.
- */
- static public void openFolder(File file) {
- try {
- String folder = file.getAbsolutePath();
-
- if (Base.isWindows()) {
- // doesn't work
- //Runtime.getRuntime().exec("cmd /c \"" + folder + "\"");
-
- // works fine on winxp, prolly win2k as well
- Runtime.getRuntime().exec("explorer \"" + folder + "\"");
-
- // not tested
- //Runtime.getRuntime().exec("start explorer \"" + folder + "\"");
-
- } else if (Base.isMacOS()) {
- openURL(folder); // handles char replacement, etc
-
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
-
-
- /**
- * "No cookie for you" type messages. Nothing fatal or all that
- * much of a bummer, but something to notify the user about.
- */
- static public void showMessage(String title, String message) {
- if (title == null) title = "Message";
- JOptionPane.showMessageDialog(new Frame(), message, title,
- JOptionPane.INFORMATION_MESSAGE);
- }
-
-
- /**
- * Non-fatal error message with optional stack trace side dish.
- */
- static public void showWarning(String title, String message,
- Exception e) {
- if (title == null) title = "Warning";
- JOptionPane.showMessageDialog(new Frame(), message, title,
- JOptionPane.WARNING_MESSAGE);
-
- //System.err.println(e.toString());
- if (e != null) e.printStackTrace();
- }
-
-
- /**
- * Show an error message that's actually fatal to the program.
- * This is an error that can't be recovered. Use showWarning()
- * for errors that allow P5 to continue running.
- */
- static public void showError(String title, String message,
- Exception e) {
- if (title == null) title = "Error";
- JOptionPane.showMessageDialog(new Frame(), message, title,
- JOptionPane.ERROR_MESSAGE);
-
- if (e != null) e.printStackTrace();
- System.exit(1);
- }
-
-
- // ...................................................................
-
-
- static public Image getImage(String name, Component who) {
- Image image = null;
- Toolkit tk = Toolkit.getDefaultToolkit();
-
- //if ((Base.platform == Base.MACOSX) ||
- //(Base.platform == Base.MACOS9)) {
- image = tk.getImage("lib/" + name);
- //} else {
- //image = tk.getImage(who.getClass().getResource(name));
- //}
-
- //image = tk.getImage("lib/" + name);
- //URL url = PdeApplet.class.getResource(name);
- //image = tk.getImage(url);
- //}
- //MediaTracker tracker = new MediaTracker(applet);
- MediaTracker tracker = new MediaTracker(who); //frame);
- tracker.addImage(image, 0);
- try {
- tracker.waitForAll();
- } catch (InterruptedException e) { }
- return image;
- }
-
-
- static public InputStream getStream(String filename) throws IOException {
- //if (Base.platform == Base.MACOSX) {
- // macos doesn't seem to think that files in the lib folder
- // are part of the resources, unlike windows or linux.
- // actually, this is only the case when running as a .app,
- // since it works fine from run.sh, but not Arduino.app
- return new FileInputStream("lib/" + filename);
- //}
-
- // all other, more reasonable operating systems
- //return cls.getResource(filename).openStream();
- //return Base.class.getResource(filename).openStream();
- }
-
-
- // ...................................................................
-
-
- static public byte[] grabFile(File file) throws IOException {
- int size = (int) file.length();
- FileInputStream input = new FileInputStream(file);
- byte buffer[] = new byte[size];
- int offset = 0;
- int bytesRead;
- while ((bytesRead = input.read(buffer, offset, size-offset)) != -1) {
- offset += bytesRead;
- if (bytesRead == 0) break;
- }
- input.close(); // weren't properly being closed
- input = null;
- return buffer;
- }
-
-
- static public void copyFile(File afile, File bfile) throws IOException {
- InputStream from = new BufferedInputStream(new FileInputStream(afile));
- OutputStream to = new BufferedOutputStream(new FileOutputStream(bfile));
- byte[] buffer = new byte[16 * 1024];
- int bytesRead;
- while ((bytesRead = from.read(buffer)) != -1) {
- to.write(buffer, 0, bytesRead);
- }
- to.flush();
- from.close(); // ??
- from = null;
- to.close(); // ??
- to = null;
-
- bfile.setLastModified(afile.lastModified()); // jdk13+ required
- //} catch (IOException e) {
- // e.printStackTrace();
- //}
- }
-
-
- /**
- * Grab the contents of a file as a string.
- */
- static public String loadFile(File file) throws IOException {
- // empty code file.. no worries, might be getting filled up later
- if (file.length() == 0) return "";
-
- InputStreamReader isr = new InputStreamReader(new FileInputStream(file));
- BufferedReader reader = new BufferedReader(isr);
-
- StringBuffer buffer = new StringBuffer();
- String line = null;
- while ((line = reader.readLine()) != null) {
- buffer.append(line);
- buffer.append('\n');
- }
- reader.close();
- return buffer.toString();
- }
-
-
- /**
- * Spew the contents of a String object out to a file.
- */
- static public void saveFile(String str,
- File file) throws IOException {
-
- ByteArrayInputStream bis = new ByteArrayInputStream(str.getBytes());
- InputStreamReader isr = new InputStreamReader(bis);
- BufferedReader reader = new BufferedReader(isr);
-
- FileWriter fw = new FileWriter(file);
- PrintWriter writer = new PrintWriter(new BufferedWriter(fw));
-
- String line = null;
- while ((line = reader.readLine()) != null) {
- writer.println(line);
- }
- writer.flush();
- writer.close();
- }
-
-
- static public void copyDir(File sourceDir,
- File targetDir) throws IOException {
- targetDir.mkdirs();
- String files[] = sourceDir.list();
- for (int i = 0; i < files.length; i++) {
- if (files[i].equals(".") || files[i].equals("..")) continue;
- File source = new File(sourceDir, files[i]);
- File target = new File(targetDir, files[i]);
- if (source.isDirectory()) {
- //target.mkdirs();
- copyDir(source, target);
- target.setLastModified(source.lastModified());
- } else {
- copyFile(source, target);
- }
- }
- }
-
-
- /**
- * Remove all files in a directory and the directory itself.
- */
- static public void removeDir(File dir) {
- if (dir.exists()) {
- removeDescendants(dir);
- dir.delete();
- }
- }
-
-
- /**
- * Recursively remove all files within a directory,
- * used with removeDir(), or when the contents of a dir
- * should be removed, but not the directory itself.
- * (i.e. when cleaning temp files from lib/build)
- */
- static public void removeDescendants(File dir) {
- if (!dir.exists()) return;
-
- String files[] = dir.list();
- for (int i = 0; i < files.length; i++) {
- if (files[i].equals(".") || files[i].equals("..")) continue;
- File dead = new File(dir, files[i]);
- if (!dead.isDirectory()) {
- if (!Preferences.getBoolean("compiler.save_build_files")) {
- if (!dead.delete()) {
- // temporarily disabled
- //System.err.println("couldn't delete " + dead);
- }
- }
- } else {
- removeDir(dead);
- //dead.delete();
- }
- }
- }
-
-
- /**
- * Calculate the size of the contents of a folder.
- * Used to determine whether sketches are empty or not.
- * Note that the function calls itself recursively.
- */
- static public int calcFolderSize(File folder) {
- int size = 0;
-
- String files[] = folder.list();
- // null if folder doesn't exist, happens when deleting sketch
- if (files == null) return -1;
-
- for (int i = 0; i < files.length; i++) {
- if (files[i].equals(".") || (files[i].equals("..")) ||
- files[i].equals(".DS_Store")) continue;
- File fella = new File(folder, files[i]);
- if (fella.isDirectory()) {
- size += calcFolderSize(fella);
- } else {
- size += (int) fella.length();
- }
- }
- return size;
- }
-
-
- /**
- * Equivalent to the one in PApplet, but static (die() is removed)
- */
- static public String[] loadStrings(File file) {
- try {
- FileInputStream input = new FileInputStream(file);
- BufferedReader reader =
- new BufferedReader(new InputStreamReader(input));
-
- String lines[] = new String[100];
- int lineCount = 0;
- String line = null;
- while ((line = reader.readLine()) != null) {
- if (lineCount == lines.length) {
- String temp[] = new String[lineCount << 1];
- System.arraycopy(lines, 0, temp, 0, lineCount);
- lines = temp;
- }
- lines[lineCount++] = line;
- }
- reader.close();
-
- if (lineCount == lines.length) {
- return lines;
- }
-
- // resize array to appropraite amount for these lines
- String output[] = new String[lineCount];
- System.arraycopy(lines, 0, output, 0, lineCount);
- return output;
-
- } catch (IOException e) {
- e.printStackTrace();
- }
- return null;
- }
-
- //////////////////////////////////////////////////////////////
-
- // STRINGS
-
-
- /**
- * Remove whitespace characters from the beginning and ending
- * of a String. Works like String.trim() but includes the
- * unicode nbsp character as well.
- */
- static public String trim(String str) {
- return str.replace('\u00A0', ' ').trim();
-
- /*
- int left = 0;
- int right = str.length() - 1;
-
- while ((left <= right) &&
- (WHITESPACE.indexOf(str.charAt(left)) != -1)) left++;
- if (left == right) return "";
-
- while (WHITESPACE.indexOf(str.charAt(right)) != -1) --right;
-
- return str.substring(left, right-left+1);
- */
- }
-
- /**
- * Join an array of Strings together as a single String,
- * separated by the whatever's passed in for the separator.
- */
- static public String join(String str[], char separator) {
- return join(str, String.valueOf(separator));
- }
-
-
- /**
- * Join an array of Strings together as a single String,
- * separated by the whatever's passed in for the separator.
- *
- * To use this on numbers, first pass the array to nf() or nfs()
- * to get a list of String objects, then use join on that.
- *
- * e.g. String stuff[] = { "apple", "bear", "cat" };
- * String list = join(stuff, ", ");
- * // list is now "apple, bear, cat"
- */
- static public String join(String str[], String separator) {
- StringBuffer buffer = new StringBuffer();
- for (int i = 0; i < str.length; i++) {
- if (i != 0) buffer.append(separator);
- buffer.append(str[i]);
- }
- return buffer.toString();
- }
-
-
- /**
- * Split the provided String at wherever whitespace occurs.
- * Multiple whitespace (extra spaces or tabs or whatever)
- * between items will count as a single break.
- *
- * The whitespace characters are "\t\n\r\f", which are the defaults
- * for java.util.StringTokenizer, plus the unicode non-breaking space
- * character, which is found commonly on files created by or used
- * in conjunction with Mac OS X (character 160, or 0x00A0 in hex).
- *
- * i.e. split("a b") -> { "a", "b" }
- * split("a b") -> { "a", "b" }
- * split("a\tb") -> { "a", "b" }
- * split("a \t b ") -> { "a", "b" }
- */
- static public String[] split(String what) {
- return split(what, WHITESPACE);
- }
-
-
- /**
- * Splits a string into pieces, using any of the chars in the
- * String 'delim' as separator characters. For instance,
- * in addition to white space, you might want to treat commas
- * as a separator. The delimeter characters won't appear in
- * the returned String array.
- *
- * i.e. split("a, b", " ,") -> { "a", "b" }
- *
- * To include all the whitespace possibilities, use the variable
- * WHITESPACE, found in PConstants:
- *
- * i.e. split("a | b", WHITESPACE + "|"); -> { "a", "b" }
- */
- static public String[] split(String what, String delim) {
- StringTokenizer toker = new StringTokenizer(what, delim);
- String pieces[] = new String[toker.countTokens()];
-
- int index = 0;
- while (toker.hasMoreTokens()) {
- pieces[index++] = toker.nextToken();
- }
- return pieces;
- }
-
-
- /**
- * Split a string into pieces along a specific character.
- * Most commonly used to break up a String along tab characters.
- *
- * This operates differently than the others, where the
- * single delimeter is the only breaking point, and consecutive
- * delimeters will produce an empty string (""). This way,
- * one can split on tab characters, but maintain the column
- * alignments (of say an excel file) where there are empty columns.
- */
- static public String[] split(String what, char delim) {
- // do this so that the exception occurs inside the user's
- // program, rather than appearing to be a bug inside split()
- if (what == null) return null;
- //return split(what, String.valueOf(delim)); // huh
-
- char chars[] = what.toCharArray();
- int splitCount = 0; //1;
- for (int i = 0; i < chars.length; i++) {
- if (chars[i] == delim) splitCount++;
- }
- // make sure that there is something in the input string
- //if (chars.length > 0) {
- // if the last char is a delimeter, get rid of it..
- //if (chars[chars.length-1] == delim) splitCount--;
- // on second thought, i don't agree with this, will disable
- //}
- if (splitCount == 0) {
- String splits[] = new String[1];
- splits[0] = new String(what);
- return splits;
- }
- //int pieceCount = splitCount + 1;
- String splits[] = new String[splitCount + 1];
- int splitIndex = 0;
- int startIndex = 0;
- for (int i = 0; i < chars.length; i++) {
- if (chars[i] == delim) {
- splits[splitIndex++] =
- new String(chars, startIndex, i-startIndex);
- startIndex = i + 1;
- }
- }
- //if (startIndex != chars.length) {
- splits[splitIndex] =
- new String(chars, startIndex, chars.length-startIndex);
- //}
- return splits;
- }
-
-
-
-
-}
+/* -*- mode: jde; c-basic-offset: 2; indent-tabs-mode: nil -*- */
+
+/*
+ Part of the Arduino project - http://arduino.berlios.de
+
+
+
+ Based on processing http://www.processing.org
+ Copyright (c) 2004-05 Ben Fry and Casey Reas
+ Copyright (c) 2001-04 Massachusetts Institute of Technology
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+*/
+
+package processing.app;
+
+import java.awt.*;
+import java.awt.event.*;
+import java.io.*;
+import java.lang.reflect.*;
+import java.net.*;
+import java.util.*;
+import java.util.zip.*;
+
+import javax.swing.*;
+import javax.swing.event.*;
+import javax.swing.text.*;
+import javax.swing.undo.*;
+
+import com.apple.mrj.*;
+import com.ice.jni.registry.*;
+
+
+
+/**
+ * The base class for the main Arduino application.
+ *
+ * Primary role of this class is for platform identification and
+ * general interaction with the system (launching URLs, loading
+ * files and images, etc) that comes from that.
+ */
+public class Base {
+ static final int VERSION = 1;
+ static final String VERSION_NAME = "0003 Alpha";
+
+ static public int platform;
+
+ // platform IDs for platform
+
+ static final int WINDOWS = 1;
+ static final int MACOS9 = 2;
+ static final int MACOSX = 3;
+ static final int LINUX = 4;
+ static final int OTHER = 0;
+
+
+ // moved from PApplet
+ // in preperation of detaching the IDE from the
+ // Arduino core classes
+
+ /**
+ * Current platform in use.
+ *
+ * Equivalent to System.getProperty("os.name"), just used internally.
+ */
+ static public String platformName = System.getProperty("os.name");
+
+ static {
+ // figure out which operating system
+ // this has to be first, since editor needs to know
+
+ if (platformName.toLowerCase().indexOf("mac") != -1) {
+ // can only check this property if running on a mac
+ // on a pc it throws a security exception and kills the applet
+ // (but on the mac it does just fine)
+ if (System.getProperty("mrj.version") != null) { // running on a mac
+ platform = (platformName.equals("Mac OS X")) ?
+ MACOSX : MACOS9;
+ }
+
+ } else {
+ String osname = System.getProperty("os.name");
+
+ if (osname.indexOf("Windows") != -1) {
+ platform = WINDOWS;
+
+ } else if (osname.equals("Linux")) { // true for the ibm vm
+ platform = LINUX;
+
+ } else {
+ platform = OTHER;
+ }
+ }
+ }
+
+ // used by split, all the standard whitespace chars
+ // (uncludes unicode nbsp, that little bostage)
+
+ static final String WHITESPACE = " \t\n\r\f\u00A0";
+
+
+
+
+ /**
+ * Path of filename opened on the command line,
+ * or via the MRJ open document handler.
+ */
+ static String openedAtStartup;
+
+ Editor editor;
+
+
+ static public void main(String args[]) {
+
+ // make sure that this is running on java 1.4
+
+ //if (PApplet.javaVersion < 1.4f) {
+ //System.err.println("no way man");
+ // Base.showError("Need to install Java 1.4",
+ // "This version of Arduino requires \n" +
+ // "Java 1.4 or later to run properly.\n" +
+ // "Please visit java.com to upgrade.", null);
+ // }
+
+
+ // grab any opened file from the command line
+
+ if (args.length == 1) {
+ Base.openedAtStartup = args[0];
+ }
+
+
+ // register a temporary/early version of the mrj open document handler,
+ // because the event may be lost (sometimes, not always) by the time
+ // that Editor is properly constructed.
+
+ MRJOpenDocumentHandler startupOpen = new MRJOpenDocumentHandler() {
+ public void handleOpenFile(File file) {
+ // this will only get set once.. later will be handled
+ // by the Editor version of this fella
+ if (Base.openedAtStartup == null) {
+ //System.out.println("handling outside open file: " + file);
+ Base.openedAtStartup = file.getAbsolutePath();
+ }
+ }
+ };
+ MRJApplicationUtils.registerOpenDocumentHandler(startupOpen);
+
+ Base app = new Base();
+ }
+
+
+ public Base() {
+
+ // set the look and feel before opening the window
+
+ try {
+ if (Base.isLinux()) {
+ // linux is by default (motif?) even uglier than metal
+ // actually, i'm using native menus, so they're ugly and
+ // motif-looking. ick. need to fix this.
+ UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
+ } else {
+ UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ // build the editor object
+ editor = new Editor();
+
+ // get things rawkin
+ editor.pack();
+
+ // has to be here to set window size properly
+ editor.restorePreferences();
+
+ // show the window
+ editor.show();
+
+ // check for updates
+ if (Preferences.getBoolean("update.check")) {
+ new UpdateCheck(editor);
+ }
+ }
+
+
+ // .................................................................
+
+
+ /**
+ * returns true if the Arduino is running on a Mac OS machine,
+ * specifically a Mac OS X machine because it doesn't un on OS 9 anymore.
+ */
+ static public boolean isMacOS() {
+ return platform == MACOSX;
+ }
+
+
+ /**
+ * returns true if running on windows.
+ */
+ static public boolean isWindows() {
+
+ return platform == WINDOWS;
+ }
+
+
+ /**
+ * true if running on linux.
+ */
+ static public boolean isLinux() {
+
+ return platform == LINUX;
+ }
+
+
+ // .................................................................
+
+
+ static final int kDocumentsFolderType =
+ ('d' << 24) | ('o' << 16) | ('c' << 8) | 's';
+ static final int kPreferencesFolderType =
+ ('p' << 24) | ('r' << 16) | ('e' << 8) | 'f';
+ static final int kDomainLibraryFolderType =
+ ('d' << 24) | ('l' << 16) | ('i' << 8) | 'b';
+ static final short kUserDomain = -32763;
+
+
+ static public File getSettingsFolder() {
+ File dataFolder = null;
+
+ String pref = Preferences.get("settings.path");
+ if (pref != null) {
+ dataFolder = new File(pref);
+
+ } else if (Base.isMacOS()) {
+ // carbon folder constants
+ // http://developer.apple.com/documentation/Carbon/Reference
+ // /Folder_Manager/folder_manager_ref/constant_6.html#/
+ // /apple_ref/doc/uid/TP30000238/C006889
+
+ // additional information found int the local file:
+ // /System/Library/Frameworks/CoreServices.framework
+ // /Versions/Current/Frameworks/CarbonCore.framework/Headers/
+
+ // this is the 1.4 version.. but using 1.3 since i have the stubs
+ // import com.apple.eio.*
+ //println(FileManager.findFolder(kUserDomain,
+ // kDomainLibraryFolderType));
+
+ // not clear if i can write to this folder tho..
+ try {
+ /*
+ if (false) {
+ // this is because the mrjtoolkit stubs don't have the
+ // thows exception around them
+ new FileInputStream("ignored");
+ }
+ */
+
+ // this method has to be dynamically loaded, because
+ MRJOSType domainLibrary = new MRJOSType("dlib");
+ Method findFolderMethod =
+ MRJFileUtils.class.getMethod("findFolder",
+ new Class[] { Short.TYPE,
+ MRJOSType.class });
+ File libraryFolder = (File)
+ findFolderMethod.invoke(null, new Object[] { new Short(kUserDomain),
+ domainLibrary });
+
+ dataFolder = new File(libraryFolder, "Arduino");
+
+ } catch (Exception e) {
+ // this could be FileNotFound or NoSuchMethod
+ //} catch (FileNotFoundException e) {
+ //e.printStackTrace();
+ //System.exit(1);
+ showError("Problem getting data folder",
+ "Error getting the Arduino data folder.", e);
+ }
+
+ } else if (Base.isWindows()) {
+ // looking for Documents and Settings/blah/Application Data/Arduino
+
+ // this is just based on the other documentation, and eyeballing
+ // that part of the registry.. not confirmed by any msft/msdn docs.
+ // HKEY_CURRENT_USER\Software\Microsoft
+ // \Windows\CurrentVersion\Explorer\Shell Folders
+ // Value Name: AppData
+ // Value Type: REG_SZ
+ // Value Data: path
+
+ try {
+ //RegistryKey topKey = Registry.getTopLevelKey("HKCU");
+ RegistryKey topKey = Registry.HKEY_CURRENT_USER;
+
+ String localKeyPath =
+ "Software\\Microsoft\\Windows\\CurrentVersion" +
+ "\\Explorer\\Shell Folders";
+ RegistryKey localKey = topKey.openSubKey(localKeyPath);
+ String appDataPath = cleanKey(localKey.getStringValue("AppData"));
+ //System.out.println("app data path is " + appDataPath);
+ //System.exit(0);
+ //topKey.closeKey(); // necessary?
+ //localKey.closeKey();
+
+ dataFolder = new File(appDataPath, "Arduino");
+
+ } catch (Exception e) {
+ showError("Problem getting data folder",
+ "Error getting the Arduino data folder.", e);
+ }
+ //return null;
+
+ } else {
+ // otherwise make a .arduino directory int the user's home dir
+ File home = new File(System.getProperty("user.home"));
+ dataFolder = new File(home, ".arduino");
+ }
+
+ // create the folder if it doesn't exist already
+ boolean result = true;
+ if (!dataFolder.exists()) {
+ result = dataFolder.mkdirs();
+ }
+
+ if (!result) {
+ // try the fallback location
+ System.out.println("Using fallback path for settings.");
+ String fallback = Preferences.get("settings.path.fallback");
+ dataFolder = new File(fallback);
+ if (!dataFolder.exists()) {
+ result = dataFolder.mkdirs();
+ }
+ }
+
+ if (!result) {
+ showError("Settings issues",
+ "Arduino cannot run because it could not\n" +
+ "create a folder to store your settings.", null);
+ }
+
+ return dataFolder;
+ }
+
+
+ static public File getSettingsFile(String filename) {
+ return new File(getSettingsFolder(), filename);
+ }
+
+
+ static public File getBuildFolder() {
+ String buildPath = Preferences.get("build.path");
+ if (buildPath != null) return new File(buildPath);
+
+ File folder = new File(getTempFolder(), "build");
+ if (!folder.exists()) folder.mkdirs();
+ return folder;
+ }
+
+
+ /**
+ * Get the path to the platform's temporary folder, by creating
+ * a temporary temporary file and getting its parent folder.
+ */
+ static public File getTempFolder() {
+ try {
+ File ignored = File.createTempFile("ignored", null);
+ String tempPath = ignored.getParent();
+ ignored.delete();
+ return new File(tempPath);
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return null; // TODO could we *really* ever reach this?
+ }
+
+
+ /*
+ static public void addBuildFolderToClassPath() {
+ String path = getBuildFolder().getAbsolutePath();
+ String jcp = System.getProperty("java.class.path");
+ if (jcp.indexOf(path) == -1) {
+ System.setProperty("java.class.path", path + File.pathSeparator + jcp);
+ //return new File(getProcessingDataFolder(), "build");
+ System.out.println("jcp is now " +
+ System.getProperty("java.class.path"));
+ }
+ }
+ */
+
+
+ static public File getDefaultSketchbookFolder() {
+ File sketchbookFolder = null;
+
+ if (Base.isMacOS()) {
+ // looking for /Users/blah/Documents/Arduino
+
+ // carbon folder constants
+ // http://developer.apple.com/documentation/Carbon/Reference/Folder_Manager/folder_manager_ref/constant_6.html#//apple_ref/doc/uid/TP30000238/C006889
+
+ // additional information found int the local file:
+ // /System/Library/Frameworks/CoreServices.framework/Versions/Current/Frameworks/CarbonCore.framework/Headers/
+
+ // this is the 1.4 version.. but using 1.3 since i have the stubs
+ // import com.apple.eio.*
+ //println(FileManager.findFolder(kUserDomain,
+ // kDomainLibraryFolderType));
+
+ // not clear if i can write to this folder tho..
+ try {
+ MRJOSType domainDocuments = new MRJOSType("docs");
+ //File libraryFolder = MRJFileUtils.findFolder(domainDocuments);
+
+ // for 77, try switching this to the user domain, just to be sure
+ Method findFolderMethod =
+ MRJFileUtils.class.getMethod("findFolder",
+ new Class[] { Short.TYPE,
+ MRJOSType.class });
+ File documentsFolder = (File)
+ findFolderMethod.invoke(null, new Object[] { new Short(kUserDomain),
+ domainDocuments });
+ sketchbookFolder = new File(documentsFolder, "Arduino");
+
+ } catch (Exception e) {
+ showError("sketch folder problem",
+ "Could not locate default sketch folder location.", e);
+ }
+
+ } else if (isWindows()) {
+ // looking for Documents and Settings/blah/My Documents/Arduino
+ // (though using a reg key since it's different on other platforms)
+
+ // http://support.microsoft.com/?kbid=221837&sd=RMVP
+ // The path to the My Documents folder is stored in the
+ // following registry key, where path is the complete path
+ // to your storage location:
+ // HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
+ // Value Name: Personal
+ // Value Type: REG_SZ
+ // Value Data: path
+
+ try {
+ RegistryKey topKey = Registry.HKEY_CURRENT_USER;
+
+ String localKeyPath =
+ "Software\\Microsoft\\Windows\\CurrentVersion" +
+ "\\Explorer\\Shell Folders";
+ RegistryKey localKey = topKey.openSubKey(localKeyPath);
+ String personalPath = cleanKey(localKey.getStringValue("Personal"));
+ //topKey.closeKey(); // necessary?
+ //localKey.closeKey();
+ sketchbookFolder = new File(personalPath, "Arduino");
+
+ } catch (Exception e) {
+ showError("Problem getting documents folder",
+ "Error getting the Arduino sketchbook folder.", e);
+ }
+
+ } else {
+ // on linux (or elsewhere?) prompt the user for the location
+ JFileChooser fc = new JFileChooser();
+ fc.setDialogTitle("Select the folder where " +
+ "Arduino programs should be stored...");
+ //fc.setSelectedFile(new File(sketchbookLocationField.getText()));
+ fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
+
+ int returned = fc.showOpenDialog(new JDialog());
+ if (returned == JFileChooser.APPROVE_OPTION) {
+ //File file = fc.getSelectedFile();
+ //sketchbookLocationField.setText(file.getAbsolutePath());
+ sketchbookFolder = fc.getSelectedFile();
+
+ } else {
+ System.exit(0);
+ }
+ }
+
+ // create the folder if it doesn't exist already
+ boolean result = true;
+ if (!sketchbookFolder.exists()) {
+ result = sketchbookFolder.mkdirs();
+ }
+
+ if (!result) {
+ // try the fallback location
+ System.out.println("Using fallback path for sketchbook.");
+ String fallback = Preferences.get("sketchbook.path.fallback");
+ sketchbookFolder = new File(fallback);
+ if (!sketchbookFolder.exists()) {
+ result = sketchbookFolder.mkdirs();
+ }
+ }
+
+ if (!result) {
+ showError("error",
+ "Arduino cannot run because it could not\n" +
+ "create a folder to store your sketchbook.", null);
+ }
+
+ return sketchbookFolder;
+ }
+
+
+ static public String cleanKey(String what) {
+ // jnireg seems to be reading the chars as bytes
+ // so maybe be as simple as & 0xff and then running through decoder
+
+ char c[] = what.toCharArray();
+
+ // if chars are in the tooHigh range, it's prolly because
+ // a byte from the jni registry was turned into a char
+ // and there was a sign extension.
+ // e.g. 0xFC (252, umlaut u) became 0xFFFC (65532).
+ // but on a japanese system, maybe this is two-byte and ok?
+ int tooHigh = 65536 - 128;
+ for (int i = 0; i < c.length; i++) {
+ if (c[i] >= tooHigh) c[i] &= 0xff;
+
+ /*
+ if ((c[i] >= 32) && (c[i] < 128)) {
+ System.out.print(c[i]);
+ } else {
+ System.out.print("[" + PApplet.hex(c[i]) + "]");
+ }
+ */
+ }
+ //System.out.println();
+ return new String(c);
+ }
+
+
+ // .................................................................
+
+
+ /**
+ * Given the reference filename from the keywords list,
+ * builds a URL and passes it to openURL.
+ */
+ static public void showReference(String referenceFile) {
+ String currentDir = System.getProperty("user.dir");
+ openURL(currentDir + File.separator +
+ "reference" + File.separator +
+ referenceFile + ".html");
+ }
+
+
+ /**
+ * Implements the cross-platform headache of opening URLs
+ */
+ static public void openURL(String url) {
+ //System.out.println("opening url " + url);
+ try {
+ if (Base.isWindows()) {
+ // this is not guaranteed to work, because who knows if the
+ // path will always be c:\progra~1 et al. also if the user has
+ // a different browser set as their default (which would
+ // include me) it'd be annoying to be dropped into ie.
+ //Runtime.getRuntime().exec("c:\\progra~1\\intern~1\\iexplore "
+ // + currentDir
+
+ // the following uses a shell execute to launch the .html file
+ // note that under cygwin, the .html files have to be chmodded +x
+ // after they're unpacked from the zip file. i don't know why,
+ // and don't understand what this does in terms of windows
+ // permissions. without the chmod, the command prompt says
+ // "Access is denied" in both cygwin and the "dos" prompt.
+ //Runtime.getRuntime().exec("cmd /c " + currentDir + "\\reference\\" +
+ // referenceFile + ".html");
+ if (url.startsWith("http://")) {
+ // open dos prompt, give it 'start' command, which will
+ // open the url properly. start by itself won't work since
+ // it appears to need cmd
+ Runtime.getRuntime().exec("cmd /c start " + url);
+ } else {
+ // just launching the .html file via the shell works
+ // but make sure to chmod +x the .html files first
+ // also place quotes around it in case there's a space
+ // in the user.dir part of the url
+ Runtime.getRuntime().exec("cmd /c \"" + url + "\"");
+ }
+
+ } else if (Base.isMacOS()) {
+ //com.apple.eio.FileManager.openURL(url);
+
+ if (!url.startsWith("http://")) {
+ // prepend file:// on this guy since it's a file
+ url = "file://" + url;
+
+ // replace spaces with %20 for the file url
+ // otherwise the mac doesn't like to open it
+ // can't just use URLEncoder, since that makes slashes into
+ // %2F characters, which is no good. some might say "useless"
+ if (url.indexOf(' ') != -1) {
+ StringBuffer sb = new StringBuffer();
+ char c[] = url.toCharArray();
+ for (int i = 0; i < c.length; i++) {
+ if (c[i] == ' ') {
+ sb.append("%20");
+ } else {
+ sb.append(c[i]);
+ }
+ }
+ url = sb.toString();
+ }
+ }
+ com.apple.mrj.MRJFileUtils.openURL(url);
+
+ } else if (Base.isLinux()) {
+ // how's mozilla sound to ya, laddie?
+ //Runtime.getRuntime().exec(new String[] { "mozilla", url });
+ String browser = Preferences.get("browser");
+ Runtime.getRuntime().exec(new String[] { browser, url });
+
+ } else {
+ System.err.println("unspecified platform");
+ }
+
+ } catch (IOException e) {
+ Base.showWarning("Could not open URL",
+ "An error occurred while trying to open\n" + url, e);
+ }
+ }
+
+
+ /**
+ * Implements the other cross-platform headache of opening
+ * a folder in the machine's native file browser.
+ */
+ static public void openFolder(File file) {
+ try {
+ String folder = file.getAbsolutePath();
+
+ if (Base.isWindows()) {
+ // doesn't work
+ //Runtime.getRuntime().exec("cmd /c \"" + folder + "\"");
+
+ // works fine on winxp, prolly win2k as well
+ Runtime.getRuntime().exec("explorer \"" + folder + "\"");
+
+ // not tested
+ //Runtime.getRuntime().exec("start explorer \"" + folder + "\"");
+
+ } else if (Base.isMacOS()) {
+ openURL(folder); // handles char replacement, etc
+
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+
+ /**
+ * "No cookie for you" type messages. Nothing fatal or all that
+ * much of a bummer, but something to notify the user about.
+ */
+ static public void showMessage(String title, String message) {
+ if (title == null) title = "Message";
+ JOptionPane.showMessageDialog(new Frame(), message, title,
+ JOptionPane.INFORMATION_MESSAGE);
+ }
+
+
+ /**
+ * Non-fatal error message with optional stack trace side dish.
+ */
+ static public void showWarning(String title, String message,
+ Exception e) {
+ if (title == null) title = "Warning";
+ JOptionPane.showMessageDialog(new Frame(), message, title,
+ JOptionPane.WARNING_MESSAGE);
+
+ //System.err.println(e.toString());
+ if (e != null) e.printStackTrace();
+ }
+
+
+ /**
+ * Show an error message that's actually fatal to the program.
+ * This is an error that can't be recovered. Use showWarning()
+ * for errors that allow P5 to continue running.
+ */
+ static public void showError(String title, String message,
+ Exception e) {
+ if (title == null) title = "Error";
+ JOptionPane.showMessageDialog(new Frame(), message, title,
+ JOptionPane.ERROR_MESSAGE);
+
+ if (e != null) e.printStackTrace();
+ System.exit(1);
+ }
+
+
+ // ...................................................................
+
+
+ static public Image getImage(String name, Component who) {
+ Image image = null;
+ Toolkit tk = Toolkit.getDefaultToolkit();
+
+ //if ((Base.platform == Base.MACOSX) ||
+ //(Base.platform == Base.MACOS9)) {
+ image = tk.getImage("lib/" + name);
+ //} else {
+ //image = tk.getImage(who.getClass().getResource(name));
+ //}
+
+ //image = tk.getImage("lib/" + name);
+ //URL url = PdeApplet.class.getResource(name);
+ //image = tk.getImage(url);
+ //}
+ //MediaTracker tracker = new MediaTracker(applet);
+ MediaTracker tracker = new MediaTracker(who); //frame);
+ tracker.addImage(image, 0);
+ try {
+ tracker.waitForAll();
+ } catch (InterruptedException e) { }
+ return image;
+ }
+
+
+ static public InputStream getStream(String filename) throws IOException {
+ //if (Base.platform == Base.MACOSX) {
+ // macos doesn't seem to think that files in the lib folder
+ // are part of the resources, unlike windows or linux.
+ // actually, this is only the case when running as a .app,
+ // since it works fine from run.sh, but not Arduino.app
+ return new FileInputStream("lib/" + filename);
+ //}
+
+ // all other, more reasonable operating systems
+ //return cls.getResource(filename).openStream();
+ //return Base.class.getResource(filename).openStream();
+ }
+
+
+ // ...................................................................
+
+
+ static public byte[] grabFile(File file) throws IOException {
+ int size = (int) file.length();
+ FileInputStream input = new FileInputStream(file);
+ byte buffer[] = new byte[size];
+ int offset = 0;
+ int bytesRead;
+ while ((bytesRead = input.read(buffer, offset, size-offset)) != -1) {
+ offset += bytesRead;
+ if (bytesRead == 0) break;
+ }
+ input.close(); // weren't properly being closed
+ input = null;
+ return buffer;
+ }
+
+
+ static public void copyFile(File afile, File bfile) throws IOException {
+ InputStream from = new BufferedInputStream(new FileInputStream(afile));
+ OutputStream to = new BufferedOutputStream(new FileOutputStream(bfile));
+ byte[] buffer = new byte[16 * 1024];
+ int bytesRead;
+ while ((bytesRead = from.read(buffer)) != -1) {
+ to.write(buffer, 0, bytesRead);
+ }
+ to.flush();
+ from.close(); // ??
+ from = null;
+ to.close(); // ??
+ to = null;
+
+ bfile.setLastModified(afile.lastModified()); // jdk13+ required
+ //} catch (IOException e) {
+ // e.printStackTrace();
+ //}
+ }
+
+
+ /**
+ * Grab the contents of a file as a string.
+ */
+ static public String loadFile(File file) throws IOException {
+ // empty code file.. no worries, might be getting filled up later
+ if (file.length() == 0) return "";
+
+ InputStreamReader isr = new InputStreamReader(new FileInputStream(file));
+ BufferedReader reader = new BufferedReader(isr);
+
+ StringBuffer buffer = new StringBuffer();
+ String line = null;
+ while ((line = reader.readLine()) != null) {
+ buffer.append(line);
+ buffer.append('\n');
+ }
+ reader.close();
+ return buffer.toString();
+ }
+
+
+ /**
+ * Spew the contents of a String object out to a file.
+ */
+ static public void saveFile(String str,
+ File file) throws IOException {
+
+ ByteArrayInputStream bis = new ByteArrayInputStream(str.getBytes());
+ InputStreamReader isr = new InputStreamReader(bis);
+ BufferedReader reader = new BufferedReader(isr);
+
+ FileWriter fw = new FileWriter(file);
+ PrintWriter writer = new PrintWriter(new BufferedWriter(fw));
+
+ String line = null;
+ while ((line = reader.readLine()) != null) {
+ writer.println(line);
+ }
+ writer.flush();
+ writer.close();
+ }
+
+
+ static public void copyDir(File sourceDir,
+ File targetDir) throws IOException {
+ targetDir.mkdirs();
+ String files[] = sourceDir.list();
+ for (int i = 0; i < files.length; i++) {
+ if (files[i].equals(".") || files[i].equals("..")) continue;
+ File source = new File(sourceDir, files[i]);
+ File target = new File(targetDir, files[i]);
+ if (source.isDirectory()) {
+ //target.mkdirs();
+ copyDir(source, target);
+ target.setLastModified(source.lastModified());
+ } else {
+ copyFile(source, target);
+ }
+ }
+ }
+
+
+ /**
+ * Remove all files in a directory and the directory itself.
+ */
+ static public void removeDir(File dir) {
+ if (dir.exists()) {
+ removeDescendants(dir);
+ dir.delete();
+ }
+ }
+
+
+ /**
+ * Recursively remove all files within a directory,
+ * used with removeDir(), or when the contents of a dir
+ * should be removed, but not the directory itself.
+ * (i.e. when cleaning temp files from lib/build)
+ */
+ static public void removeDescendants(File dir) {
+ if (!dir.exists()) return;
+
+ String files[] = dir.list();
+ for (int i = 0; i < files.length; i++) {
+ if (files[i].equals(".") || files[i].equals("..")) continue;
+ File dead = new File(dir, files[i]);
+ if (!dead.isDirectory()) {
+ if (!Preferences.getBoolean("compiler.save_build_files")) {
+ if (!dead.delete()) {
+ // temporarily disabled
+ //System.err.println("couldn't delete " + dead);
+ }
+ }
+ } else {
+ removeDir(dead);
+ //dead.delete();
+ }
+ }
+ }
+
+
+ /**
+ * Calculate the size of the contents of a folder.
+ * Used to determine whether sketches are empty or not.
+ * Note that the function calls itself recursively.
+ */
+ static public int calcFolderSize(File folder) {
+ int size = 0;
+
+ String files[] = folder.list();
+ // null if folder doesn't exist, happens when deleting sketch
+ if (files == null) return -1;
+
+ for (int i = 0; i < files.length; i++) {
+ if (files[i].equals(".") || (files[i].equals("..")) ||
+ files[i].equals(".DS_Store")) continue;
+ File fella = new File(folder, files[i]);
+ if (fella.isDirectory()) {
+ size += calcFolderSize(fella);
+ } else {
+ size += (int) fella.length();
+ }
+ }
+ return size;
+ }
+
+
+ /**
+ * Equivalent to the one in PApplet, but static (die() is removed)
+ */
+ static public String[] loadStrings(File file) {
+ try {
+ FileInputStream input = new FileInputStream(file);
+ BufferedReader reader =
+ new BufferedReader(new InputStreamReader(input));
+
+ String lines[] = new String[100];
+ int lineCount = 0;
+ String line = null;
+ while ((line = reader.readLine()) != null) {
+ if (lineCount == lines.length) {
+ String temp[] = new String[lineCount << 1];
+ System.arraycopy(lines, 0, temp, 0, lineCount);
+ lines = temp;
+ }
+ lines[lineCount++] = line;
+ }
+ reader.close();
+
+ if (lineCount == lines.length) {
+ return lines;
+ }
+
+ // resize array to appropraite amount for these lines
+ String output[] = new String[lineCount];
+ System.arraycopy(lines, 0, output, 0, lineCount);
+ return output;
+
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ return null;
+ }
+
+ //////////////////////////////////////////////////////////////
+
+ // STRINGS
+
+
+ /**
+ * Remove whitespace characters from the beginning and ending
+ * of a String. Works like String.trim() but includes the
+ * unicode nbsp character as well.
+ */
+ static public String trim(String str) {
+ return str.replace('\u00A0', ' ').trim();
+
+ /*
+ int left = 0;
+ int right = str.length() - 1;
+
+ while ((left <= right) &&
+ (WHITESPACE.indexOf(str.charAt(left)) != -1)) left++;
+ if (left == right) return "";
+
+ while (WHITESPACE.indexOf(str.charAt(right)) != -1) --right;
+
+ return str.substring(left, right-left+1);
+ */
+ }
+
+ /**
+ * Join an array of Strings together as a single String,
+ * separated by the whatever's passed in for the separator.
+ */
+ static public String join(String str[], char separator) {
+ return join(str, String.valueOf(separator));
+ }
+
+
+ /**
+ * Join an array of Strings together as a single String,
+ * separated by the whatever's passed in for the separator.
+ *
+ * To use this on numbers, first pass the array to nf() or nfs()
+ * to get a list of String objects, then use join on that.
+ *
+ * e.g. String stuff[] = { "apple", "bear", "cat" };
+ * String list = join(stuff, ", ");
+ * // list is now "apple, bear, cat"
+ */
+ static public String join(String str[], String separator) {
+ StringBuffer buffer = new StringBuffer();
+ for (int i = 0; i < str.length; i++) {
+ if (i != 0) buffer.append(separator);
+ buffer.append(str[i]);
+ }
+ return buffer.toString();
+ }
+
+
+ /**
+ * Split the provided String at wherever whitespace occurs.
+ * Multiple whitespace (extra spaces or tabs or whatever)
+ * between items will count as a single break.
+ *
+ * The whitespace characters are "\t\n\r\f", which are the defaults
+ * for java.util.StringTokenizer, plus the unicode non-breaking space
+ * character, which is found commonly on files created by or used
+ * in conjunction with Mac OS X (character 160, or 0x00A0 in hex).
+ *
+ * i.e. split("a b") -> { "a", "b" }
+ * split("a b") -> { "a", "b" }
+ * split("a\tb") -> { "a", "b" }
+ * split("a \t b ") -> { "a", "b" }
+ */
+ static public String[] split(String what) {
+ return split(what, WHITESPACE);
+ }
+
+
+ /**
+ * Splits a string into pieces, using any of the chars in the
+ * String 'delim' as separator characters. For instance,
+ * in addition to white space, you might want to treat commas
+ * as a separator. The delimeter characters won't appear in
+ * the returned String array.
+ *
+ * i.e. split("a, b", " ,") -> { "a", "b" }
+ *
+ * To include all the whitespace possibilities, use the variable
+ * WHITESPACE, found in PConstants:
+ *
+ * i.e. split("a | b", WHITESPACE + "|"); -> { "a", "b" }
+ */
+ static public String[] split(String what, String delim) {
+ StringTokenizer toker = new StringTokenizer(what, delim);
+ String pieces[] = new String[toker.countTokens()];
+
+ int index = 0;
+ while (toker.hasMoreTokens()) {
+ pieces[index++] = toker.nextToken();
+ }
+ return pieces;
+ }
+
+
+ /**
+ * Split a string into pieces along a specific character.
+ * Most commonly used to break up a String along tab characters.
+ *
+ * This operates differently than the others, where the
+ * single delimeter is the only breaking point, and consecutive
+ * delimeters will produce an empty string (""). This way,
+ * one can split on tab characters, but maintain the column
+ * alignments (of say an excel file) where there are empty columns.
+ */
+ static public String[] split(String what, char delim) {
+ // do this so that the exception occurs inside the user's
+ // program, rather than appearing to be a bug inside split()
+ if (what == null) return null;
+ //return split(what, String.valueOf(delim)); // huh
+
+ char chars[] = what.toCharArray();
+ int splitCount = 0; //1;
+ for (int i = 0; i < chars.length; i++) {
+ if (chars[i] == delim) splitCount++;
+ }
+ // make sure that there is something in the input string
+ //if (chars.length > 0) {
+ // if the last char is a delimeter, get rid of it..
+ //if (chars[chars.length-1] == delim) splitCount--;
+ // on second thought, i don't agree with this, will disable
+ //}
+ if (splitCount == 0) {
+ String splits[] = new String[1];
+ splits[0] = new String(what);
+ return splits;
+ }
+ //int pieceCount = splitCount + 1;
+ String splits[] = new String[splitCount + 1];
+ int splitIndex = 0;
+ int startIndex = 0;
+ for (int i = 0; i < chars.length; i++) {
+ if (chars[i] == delim) {
+ splits[splitIndex++] =
+ new String(chars, startIndex, i-startIndex);
+ startIndex = i + 1;
+ }
+ }
+ //if (startIndex != chars.length) {
+ splits[splitIndex] =
+ new String(chars, startIndex, chars.length-startIndex);
+ //}
+ return splits;
+ }
+
+
+
+
+}
diff --git a/app/Compiler.java b/app/Compiler.java
index 566917b40..ac1684b7d 100644
--- a/app/Compiler.java
+++ b/app/Compiler.java
@@ -24,7 +24,7 @@
along with this program; if not, write to the Free Software Foundation,
Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- $Id:$
+ $Id$
*/
package processing.app;
diff --git a/app/Editor.java b/app/Editor.java
index 815de6222..86a6556e0 100644
--- a/app/Editor.java
+++ b/app/Editor.java
@@ -82,7 +82,7 @@ public class Editor extends JFrame
EditorHeader header;
EditorStatus status;
EditorConsole console;
-
+ Serial serialPort;
JSplitPane splitPane;
JPanel consolePanel;
@@ -107,12 +107,13 @@ public class Editor extends JFrame
JMenuItem saveMenuItem;
JMenuItem saveAsMenuItem;
-
+ //ButtonGroup serialGroup;
JMenu serialSubMenu;
JMenu serialRateSubMenu;
+ SerialMenuListener serialMenuListener;
//
-
+ boolean debugging;
boolean running;
boolean presenting;
@@ -655,9 +656,10 @@ public class Editor extends JFrame
JMenuItem item;
JMenuItem rbMenuItem;
JMenuItem cbMenuItem;
- SerialMenuListener sml = new SerialMenuListener();
SerialRateMenuListener srml = new SerialRateMenuListener();
// Enumeration portRates = {"9600","19200","38400","57600","115200"};
+
+ serialMenuListener = new SerialMenuListener();
JMenu menu = new JMenu("Tools");
@@ -675,55 +677,17 @@ public class Editor extends JFrame
serialSubMenu = new JMenu("Serial port");
- item = newJMenuItem("Update List", 'E', false);
- item.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent e) {
- // if (debug) displayResult("Serial Port List Updated");
- //updateSerial();
- }
- });
+// item = newJMenuItem("Update List", 'E', false);
+// item.addActionListener(new ActionListener() {
+// public void actionPerformed(ActionEvent e) {
+// // if (debug) displayResult("Serial Port List Updated");
+// //updateSerial();
+// }
+// });
-
-
-
-
- ButtonGroup group = new ButtonGroup();
-
-
- // getting list of ports
-
-
- try
- {
- for (Enumeration enumeration = CommPortIdentifier.getPortIdentifiers(); enumeration.hasMoreElements();)
- {
- CommPortIdentifier commportidentifier = (CommPortIdentifier)enumeration.nextElement();
- if (commportidentifier.getPortType() == CommPortIdentifier.PORT_SERIAL)
- {
- String curr_port = commportidentifier.getName();
- rbMenuItem = new JCheckBoxMenuItem(curr_port, curr_port.equals(Preferences.get("serial.port")));
- rbMenuItem.addActionListener(sml);
- group.add(rbMenuItem);
- serialSubMenu.add(rbMenuItem);
- }
- }
-
- }
-
- catch (Exception exception)
- {
- System.out.println("error retrieving port list");
- exception.printStackTrace();
- }
-
- if (serialSubMenu.getItemCount() == 0) {
- serialSubMenu.setEnabled(false);
- }
-
- //serialSubMenu.addSeparator();
- //serialSubMenu.add(item);
-
- menu.add(serialSubMenu);
+ //serialGroup = new ButtonGroup();
+ populateSerialMenu();
+ menu.add(serialSubMenu);
// End of The serial options
@@ -735,7 +699,7 @@ public class Editor extends JFrame
//serialSubMenu.add(item);
//serialSubMenu.addSeparator();
- group = new ButtonGroup();
+ ButtonGroup group = new ButtonGroup();
int curr_rate = Preferences.getInteger("serial.download_rate");
@@ -755,9 +719,55 @@ public class Editor extends JFrame
serialRateSubMenu.add(rbMenuItem);
menu.add(serialRateSubMenu);
+
+ menu.addMenuListener(new MenuListener() {
+ public void menuCanceled(MenuEvent e) {}
+ public void menuDeselected(MenuEvent e) {}
+ public void menuSelected(MenuEvent e) {
+ populateSerialMenu();
+ }
+ });
return menu;
}
+
+ protected void populateSerialMenu() {
+ // getting list of ports
+
+ JMenuItem rbMenuItem;
+
+ serialSubMenu.removeAll();
+
+ try
+ {
+ for (Enumeration enumeration = CommPortIdentifier.getPortIdentifiers(); enumeration.hasMoreElements();)
+ {
+ CommPortIdentifier commportidentifier = (CommPortIdentifier)enumeration.nextElement();
+ if (commportidentifier.getPortType() == CommPortIdentifier.PORT_SERIAL)
+ {
+ String curr_port = commportidentifier.getName();
+ rbMenuItem = new JCheckBoxMenuItem(curr_port, curr_port.equals(Preferences.get("serial.port")));
+ rbMenuItem.addActionListener(serialMenuListener);
+ //serialGroup.add(rbMenuItem);
+ serialSubMenu.add(rbMenuItem);
+ }
+ }
+
+ }
+
+ catch (Exception exception)
+ {
+ System.out.println("error retrieving port list");
+ exception.printStackTrace();
+ }
+
+ if (serialSubMenu.getItemCount() == 0) {
+ serialSubMenu.setEnabled(false);
+ }
+
+ //serialSubMenu.addSeparator();
+ //serialSubMenu.add(item);
+ }
protected JMenu buildHelpMenu() {
@@ -1292,6 +1302,17 @@ public class Editor extends JFrame
}
+ public void handleSerial() {
+ if (!debugging) {
+ console.clear();
+ serialPort = new Serial(true);
+ debugging = true;
+ } else {
+ doStop();
+ }
+ }
+
+
public void handleStop() { // called by menu or buttons
if (presenting) {
doClose();
@@ -1305,6 +1326,10 @@ public class Editor extends JFrame
* Stop the applet but don't kill its window.
*/
public void doStop() {
+ if (debugging) {
+ serialPort.dispose();
+ debugging = false;
+ }
if (runtime != null) runtime.stop();
if (watcher != null) watcher.stop();
message(EMPTY);
@@ -1695,8 +1720,8 @@ public class Editor extends JFrame
* hitting export twice, quickly, and horking things up.
*/
synchronized public void handleExport() {
- //if(debugging)
- //doStop();
+ if(debugging)
+ doStop();
console.clear();
//String what = sketch.isLibrary() ? "Applet" : "Library";
//message("Exporting " + what + "...");
diff --git a/app/EditorButtons.java b/app/EditorButtons.java
index 75c4887af..0978d7326 100644
--- a/app/EditorButtons.java
+++ b/app/EditorButtons.java
@@ -37,7 +37,7 @@ import javax.swing.event.*;
public class EditorButtons extends JComponent implements MouseInputListener {
static final String title[] = {
- "Compile", "Stop", "New", "Open", "Save", "Export"
+ "Compile", "Stop", "New", "Open", "Save", "Export", "Serial Monitor"
};
static final int BUTTON_COUNT = title.length;
@@ -52,6 +52,7 @@ public class EditorButtons extends JComponent implements MouseInputListener {
static final int OPEN = 3;
static final int SAVE = 4;
static final int EXPORT = 5;
+ static final int SERIAL = 6;
static final int INACTIVE = 0;
static final int ROLLOVER = 1;
@@ -103,6 +104,7 @@ public class EditorButtons extends JComponent implements MouseInputListener {
which[buttonCount++] = OPEN;
which[buttonCount++] = SAVE;
which[buttonCount++] = EXPORT;
+ which[buttonCount++] = SERIAL;
currentRollover = -1;
@@ -339,6 +341,7 @@ public class EditorButtons extends JComponent implements MouseInputListener {
case NEW: editor.handleNew(e.isShiftDown()); break;
case SAVE: editor.handleSave(); break;
case EXPORT: editor.handleExport(); break;
+ case SERIAL: editor.handleSerial(); break;
}
currentSelection = -1;
}
diff --git a/app/Serial.java b/app/Serial.java
index 5a73f41d6..802f9511b 100755
--- a/app/Serial.java
+++ b/app/Serial.java
@@ -59,59 +59,41 @@ public class Serial implements SerialPortEventListener {
int bufferIndex;
int bufferLast;
-
- // defaults
-
- static String dname = Preferences.get("serial.port"); //"COM1";
- static int drate = 9600;
- static char dparity = 'N';
- static int ddatabits = 8;
- static float dstopbits = 1;
-
-/*
- public void setProperties(Properties props) {
- dname =
- props.getProperty("serial.port", dname);
- drate =
- Integer.parseInt(props.getProperty("serial.rate", "9600"));
- dparity =
- props.getProperty("serial.parity", "N").charAt(0);
- ddatabits =
- Integer.parseInt(props.getProperty("serial.databits", "8"));
- dstopbits =
- new Float(props.getProperty("serial.stopbits", "1")).floatValue();
- }
-*/
-
- public void setProperties() {
- //System.out.println("setting serial properties");
- dname = Preferences.get("serial.port");
- drate = Preferences.getInteger("serial.debug_rate");
- dparity = Preferences.get("serial.parity").charAt(0);
- ddatabits = Preferences.getInteger("serial.databits");
- dstopbits = new Float(Preferences.get("serial.stopbits")).floatValue();
- }
-
public Serial(boolean monitor) {
- this(dname, drate, dparity, ddatabits, dstopbits);
+ this(Preferences.get("serial.port"),
+ Preferences.getInteger("serial.debug_rate"),
+ Preferences.get("serial.parity").charAt(0),
+ Preferences.getInteger("serial.databits"),
+ new Float(Preferences.get("serial.stopbits")).floatValue());
this.monitor = monitor;
}
public Serial() {
- //setProperties();
- this(dname, drate, dparity, ddatabits, dstopbits);
+ this(Preferences.get("serial.port"),
+ Preferences.getInteger("serial.debug_rate"),
+ Preferences.get("serial.parity").charAt(0),
+ Preferences.getInteger("serial.databits"),
+ new Float(Preferences.get("serial.stopbits")).floatValue());
}
public Serial(int irate) {
- this(dname, irate, dparity, ddatabits, dstopbits);
+ this(Preferences.get("serial.port"), irate,
+ Preferences.get("serial.parity").charAt(0),
+ Preferences.getInteger("serial.databits"),
+ new Float(Preferences.get("serial.stopbits")).floatValue());
}
public Serial(String iname, int irate) {
- this(iname, irate, dparity, ddatabits, dstopbits);
+ this(iname, irate, Preferences.get("serial.parity").charAt(0),
+ Preferences.getInteger("serial.databits"),
+ new Float(Preferences.get("serial.stopbits")).floatValue());
}
public Serial(String iname) {
- this(iname, drate, dparity, ddatabits, dstopbits);
+ this(iname, Preferences.getInteger("serial.debug_rate"),
+ Preferences.get("serial.parity").charAt(0),
+ Preferences.getInteger("serial.databits"),
+ new Float(Preferences.get("serial.stopbits")).floatValue());
}
public Serial(String iname, int irate,
diff --git a/app/Sketch.java b/app/Sketch.java
index 957fcdc4e..a8e628b6e 100644
--- a/app/Sketch.java
+++ b/app/Sketch.java
@@ -20,7 +20,7 @@
along with this program; if not, write to the Free Software Foundation,
Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- $Id:$
+ $Id$
*/
package processing.app;
diff --git a/app/Target.java b/app/Target.java
index cfd1bf07d..083f49414 100644
--- a/app/Target.java
+++ b/app/Target.java
@@ -21,7 +21,7 @@
along with this program; if not, write to the Free Software Foundation,
Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- $Id:$
+ $Id$
*/
package processing.app;
diff --git a/app/Uploader.java b/app/Uploader.java
index 64344cf09..8ec4d9224 100755
--- a/app/Uploader.java
+++ b/app/Uploader.java
@@ -21,7 +21,7 @@
along with this program; if not, write to the Free Software Foundation,
Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- $Id:$
+ $Id$
*/
package processing.app;
diff --git a/app/preproc/ExtendedCommonASTWithHiddenTokens.java b/app/preproc/ExtendedCommonASTWithHiddenTokens.java
index 124ee1be2..43519e89c 100755
--- a/app/preproc/ExtendedCommonASTWithHiddenTokens.java
+++ b/app/preproc/ExtendedCommonASTWithHiddenTokens.java
@@ -4,7 +4,7 @@ package antlr;
* Project led by Terence Parr at http://www.jGuru.com
* Software rights: http://www.antlr.org/RIGHTS.html
*
- * $Id: ExtendedCommonASTWithHiddenTokens.java,v 1.1.1.1 2005/06/22 22:18:14 h Exp $
+ * $Id$
*/
import java.io.*;
diff --git a/app/syntax/CTokenMarker.java b/app/syntax/CTokenMarker.java
index 866ea18ba..c15183214 100644
--- a/app/syntax/CTokenMarker.java
+++ b/app/syntax/CTokenMarker.java
@@ -15,7 +15,7 @@ import javax.swing.text.Segment;
* C token marker.
*
* @author Slava Pestov
- * @version $Id: CTokenMarker.java,v 1.1 2005/04/09 02:30:37 benfry Exp $
+ * @version $Id$
*/
public class CTokenMarker extends TokenMarker
{
diff --git a/app/syntax/DefaultInputHandler.java b/app/syntax/DefaultInputHandler.java
index 3686f0169..7ae11121b 100644
--- a/app/syntax/DefaultInputHandler.java
+++ b/app/syntax/DefaultInputHandler.java
@@ -19,7 +19,7 @@ import java.util.StringTokenizer;
* The default input handler. It maps sequences of keystrokes into actions
* and inserts key typed events into the text area.
* @author Slava Pestov
- * @version $Id: DefaultInputHandler.java,v 1.2 2005/05/11 08:34:16 benfry Exp $
+ * @version $Id$
*/
public class DefaultInputHandler extends InputHandler
{
diff --git a/app/syntax/InputHandler.java b/app/syntax/InputHandler.java
index de2bc4384..3c2186792 100644
--- a/app/syntax/InputHandler.java
+++ b/app/syntax/InputHandler.java
@@ -24,7 +24,7 @@ import java.util.*;
* to the implementations of this class to do so.
*
* @author Slava Pestov
- * @version $Id: InputHandler.java,v 1.1 2005/04/09 02:30:37 benfry Exp $
+ * @version $Id$
* @see org.gjt.sp.jedit.textarea.DefaultInputHandler
*/
public abstract class InputHandler extends KeyAdapter
diff --git a/app/syntax/JEditTextArea.java b/app/syntax/JEditTextArea.java
index 0963d6c0b..942039748 100644
--- a/app/syntax/JEditTextArea.java
+++ b/app/syntax/JEditTextArea.java
@@ -52,7 +52,7 @@ import java.util.Vector;
* + "}");
*
* @author Slava Pestov
- * @version $Id: JEditTextArea.java,v 1.5 2005/05/10 00:29:05 benfry Exp $
+ * @version $Id$
*/
public class JEditTextArea extends JComponent
{
diff --git a/app/syntax/KeywordMap.java b/app/syntax/KeywordMap.java
index cb6a9524f..c19b4a777 100644
--- a/app/syntax/KeywordMap.java
+++ b/app/syntax/KeywordMap.java
@@ -20,7 +20,7 @@ import javax.swing.text.Segment;
* This class is used by CTokenMarker
to map keywords to ids.
*
* @author Slava Pestov, Mike Dillon
- * @version $Id: KeywordMap.java,v 1.1 2005/04/09 02:30:37 benfry Exp $
+ * @version $Id$
*/
public class KeywordMap
{
diff --git a/app/syntax/SyntaxDocument.java b/app/syntax/SyntaxDocument.java
index 6a7e9e4b8..25b50d69a 100644
--- a/app/syntax/SyntaxDocument.java
+++ b/app/syntax/SyntaxDocument.java
@@ -18,7 +18,7 @@ import javax.swing.undo.UndoableEdit;
* system.
*
* @author Slava Pestov
- * @version $Id: SyntaxDocument.java,v 1.1 2005/04/09 02:30:37 benfry Exp $
+ * @version $Id$
*/
public class SyntaxDocument extends PlainDocument
{
diff --git a/app/syntax/SyntaxStyle.java b/app/syntax/SyntaxStyle.java
index bed4720d0..000b40aef 100644
--- a/app/syntax/SyntaxStyle.java
+++ b/app/syntax/SyntaxStyle.java
@@ -16,7 +16,7 @@ import java.util.StringTokenizer;
* A simple text style class. It can specify the color, italic flag,
* and bold flag of a run of text.
* @author Slava Pestov
- * @version $Id: SyntaxStyle.java,v 1.1 2005/04/09 02:30:37 benfry Exp $
+ * @version $Id$
*/
public class SyntaxStyle
{
diff --git a/app/syntax/SyntaxUtilities.java b/app/syntax/SyntaxUtilities.java
index b822b8e81..6da021b52 100644
--- a/app/syntax/SyntaxUtilities.java
+++ b/app/syntax/SyntaxUtilities.java
@@ -18,7 +18,7 @@ import java.awt.*;
* subsystem.
*
* @author Slava Pestov
- * @version $Id: SyntaxUtilities.java,v 1.1 2005/04/09 02:30:37 benfry Exp $
+ * @version $Id$
*/
public class SyntaxUtilities
{
diff --git a/app/syntax/TextAreaPainter.java b/app/syntax/TextAreaPainter.java
index e26db3387..fb7eeeef3 100644
--- a/app/syntax/TextAreaPainter.java
+++ b/app/syntax/TextAreaPainter.java
@@ -23,7 +23,7 @@ import java.awt.*;
* The text area repaint manager. It performs double buffering and paints
* lines of text.
* @author Slava Pestov
- * @version $Id: TextAreaPainter.java,v 1.3 2005/05/10 01:17:21 benfry Exp $
+ * @version $Id$
*/
public class TextAreaPainter extends JComponent implements TabExpander
{
diff --git a/app/syntax/TextUtilities.java b/app/syntax/TextUtilities.java
index 1d2578573..29db67716 100644
--- a/app/syntax/TextUtilities.java
+++ b/app/syntax/TextUtilities.java
@@ -14,7 +14,7 @@ import javax.swing.text.*;
/**
* Class with several utility functions used by the text area component.
* @author Slava Pestov
- * @version $Id: TextUtilities.java,v 1.1 2005/04/09 02:30:37 benfry Exp $
+ * @version $Id$
*/
public class TextUtilities
{
diff --git a/app/syntax/Token.java b/app/syntax/Token.java
index 5ad43f913..1873d50da 100644
--- a/app/syntax/Token.java
+++ b/app/syntax/Token.java
@@ -17,7 +17,7 @@ package processing.app.syntax;
* token in the text, and a pointer to the next token in the list.
*
* @author Slava Pestov
- * @version $Id: Token.java,v 1.1 2005/04/09 02:30:37 benfry Exp $
+ * @version $Id$
*/
public class Token
{
diff --git a/app/syntax/TokenMarker.java b/app/syntax/TokenMarker.java
index be9a73bed..942568ab2 100644
--- a/app/syntax/TokenMarker.java
+++ b/app/syntax/TokenMarker.java
@@ -23,7 +23,7 @@ import java.util.*;
* cached.
*
* @author Slava Pestov
- * @version $Id: TokenMarker.java,v 1.1 2005/04/09 02:30:37 benfry Exp $
+ * @version $Id$
*
* @see org.gjt.sp.jedit.syntax.Token
*/
diff --git a/build/howto.txt b/build/howto.txt
index 0ce25c917..0983b455d 100755
--- a/build/howto.txt
+++ b/build/howto.txt
@@ -121,4 +121,4 @@ the code, but all the other annoying crap that the build scripts do)
then maybe we could switch to it. It's all about reaching some kind
of critical mass.
-$Id:$
+$Id$
diff --git a/lib/librxtxSerial.so b/build/linux/dist/librxtxSerial.so
similarity index 100%
rename from lib/librxtxSerial.so
rename to build/linux/dist/librxtxSerial.so
diff --git a/build/linux/make.sh b/build/linux/make.sh
index 87d08fd95..5120db6f6 100755
--- a/build/linux/make.sh
+++ b/build/linux/make.sh
@@ -30,7 +30,7 @@ else
mkdir -p work/examples
#need to replace this with the linux native library for RXTX
- cp ../../lib/librxtxSerial.so work/
+ cp dist/librxtxSerial.so work/
cp dist/arduino work/
diff --git a/build/macosx/Arduino.xcodeproj/project.pbxproj b/build/macosx/Arduino.xcodeproj/project.pbxproj
new file mode 100644
index 000000000..69cc17215
--- /dev/null
+++ b/build/macosx/Arduino.xcodeproj/project.pbxproj
@@ -0,0 +1,1167 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 42;
+ objects = {
+
+/* Begin PBXAggregateTarget section */
+ 33FFFE1C0965BBEF0016AC38 /* Dist */ = {
+ isa = PBXAggregateTarget;
+ buildConfigurationList = 33FFFE1F0965BC300016AC38 /* Build configuration list for PBXAggregateTarget "Dist" */;
+ buildPhases = (
+ 33FFFE1D0965BC050016AC38 /* CopyFiles */,
+ 33FF070C0965BF760016AC38 /* CopyFiles */,
+ 33FF07130965BFA80016AC38 /* CopyFiles */,
+ 33FF071D0965C1C20016AC38 /* CopyFiles */,
+ 33FF07170965BFFE0016AC38 /* ShellScript */,
+ );
+ buildSettings = {
+ OPTIMIZATION_CFLAGS = "";
+ OTHER_CFLAGS = "";
+ OTHER_LDFLAGS = "";
+ OTHER_REZFLAGS = "";
+ PRODUCT_NAME = Arduino;
+ SECTORDER_FLAGS = "";
+ WARNING_CFLAGS = (
+ "-Wmost",
+ "-Wno-four-char-constants",
+ "-Wno-unknown-pragmas",
+ );
+ };
+ dependencies = (
+ );
+ name = Dist;
+ productName = Arduino;
+ };
+/* End PBXAggregateTarget section */
+
+/* Begin PBXApplicationTarget section */
+ 33AF61680965C4C600B514A9 /* App */ = {
+ isa = PBXApplicationTarget;
+ buildConfigurationList = 33AF616B0965C4CB00B514A9 /* Build configuration list for PBXApplicationTarget "App" */;
+ buildPhases = (
+ 33AF61640965C4C600B514A9 /* Sources */,
+ 33AF61650965C4C600B514A9 /* Resources */,
+ 33AF61660965C4C600B514A9 /* JavaArchive */,
+ 33AF61670965C4C600B514A9 /* Frameworks */,
+ 33CF03C809662DA200F2C9A9 /* CopyFiles */,
+ );
+ buildSettings = {
+ JAVA_COMPILER = /usr/bin/javac;
+ JAVA_COMPILER_FLAGS = "";
+ JAVA_ONLY = YES;
+ JAVA_SOURCE_SUBDIR = .;
+ OPTIMIZATION_CFLAGS = "";
+ OTHER_CFLAGS = "";
+ OTHER_LDFLAGS = "";
+ OTHER_REZFLAGS = "";
+ PRODUCT_NAME = App;
+ SECTORDER_FLAGS = "";
+ WARNING_CFLAGS = (
+ "-Wmost",
+ "-Wno-four-char-constants",
+ "-Wno-unknown-pragmas",
+ );
+ WRAPPER_EXTENSION = app;
+ };
+ dependencies = (
+ 33AF61710965C51E00B514A9 /* PBXTargetDependency */,
+ );
+ name = App;
+ productInstallPath = "$(USER_APPS_DIR)";
+ productName = App;
+ productReference = 33DD8FB6096AC8DA0013AF8F /* Arduino.app */;
+ productSettingsXML = "
+
+
+
+ CFBundleDevelopmentRegion
+ English
+ CFBundleExecutable
+
+ CFBundleGetInfoString
+
+ CFBundleIconFile
+ arduino.icns
+ CFBundleIdentifier
+
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ Arduino
+ CFBundlePackageType
+ APPL
+ CFBundleShortVersionString
+
+ CFBundleSignature
+ ????
+ CFBundleVersion
+ 0.0.1d1
+ Java
+
+ ClassPath
+
+ $JAVAROOT/antlr.jar
+ $JAVAROOT/Arduino.jar
+ $JAVAROOT/oro.jar
+ $JAVAROOT/mrj.jar
+ $JAVAROOT/registry.jar
+ $JAVAROOT/RXTXcomm.jar
+
+ JVMVersion
+ 1.4+
+ MainClass
+ processing.app.Base
+ Properties
+
+ apple.laf.useScreenMenuBar
+ true
+
+
+
+
+";
+ };
+/* End PBXApplicationTarget section */
+
+/* Begin PBXBuildFile section */
+ 330B21540968180400345666 /* librxtxSerial.jnilib in CopyFiles */ = {isa = PBXBuildFile; fileRef = 330B21530968180400345666 /* librxtxSerial.jnilib */; };
+ 33AF61760965C54B00B514A9 /* PreprocessorInfoChannel.java in Sources */ = {isa = PBXBuildFile; fileRef = 33FFFE3D0965BD110016AC38 /* PreprocessorInfoChannel.java */; };
+ 33AF61770965C54B00B514A9 /* EditorListener.java in Sources */ = {isa = PBXBuildFile; fileRef = 33FFFE2C0965BD110016AC38 /* EditorListener.java */; };
+ 33AF61780965C54B00B514A9 /* LineObject.java in Sources */ = {isa = PBXBuildFile; fileRef = 33FFFE3A0965BD110016AC38 /* LineObject.java */; };
+ 33AF61790965C54B00B514A9 /* Serial.java in Sources */ = {isa = PBXBuildFile; fileRef = 33FFFE590965BD110016AC38 /* Serial.java */; };
+ 33AF617A0965C54B00B514A9 /* TextUtilities.java in Sources */ = {isa = PBXBuildFile; fileRef = 33FFFE6D0965BD110016AC38 /* TextUtilities.java */; };
+ 33AF617B0965C54B00B514A9 /* EditorConsole.java in Sources */ = {isa = PBXBuildFile; fileRef = 33FFFE290965BD110016AC38 /* EditorConsole.java */; };
+ 33AF617C0965C54B00B514A9 /* TokenMarker.java in Sources */ = {isa = PBXBuildFile; fileRef = 33FFFE6F0965BD110016AC38 /* TokenMarker.java */; };
+ 33AF617D0965C54B00B514A9 /* MessageSiphon.java in Sources */ = {isa = PBXBuildFile; fileRef = 33FFFE310965BD110016AC38 /* MessageSiphon.java */; };
+ 33AF617E0965C54B00B514A9 /* FindReplace.java in Sources */ = {isa = PBXBuildFile; fileRef = 33FFFE2E0965BD110016AC38 /* FindReplace.java */; };
+ 33AF617F0965C54B00B514A9 /* SketchCode.java in Sources */ = {isa = PBXBuildFile; fileRef = 33FFFE5C0965BD110016AC38 /* SketchCode.java */; };
+ 33AF61800965C54B00B514A9 /* EditorLineStatus.java in Sources */ = {isa = PBXBuildFile; fileRef = 33FFFE2B0965BD110016AC38 /* EditorLineStatus.java */; };
+ 33AF61810965C54B00B514A9 /* EditorHeader.java in Sources */ = {isa = PBXBuildFile; fileRef = 33FFFE2A0965BD110016AC38 /* EditorHeader.java */; };
+ 33AF61820965C54B00B514A9 /* EditorButtons.java in Sources */ = {isa = PBXBuildFile; fileRef = 33FFFE280965BD100016AC38 /* EditorButtons.java */; };
+ 33AF61830965C54B00B514A9 /* SyntaxStyle.java in Sources */ = {isa = PBXBuildFile; fileRef = 33FFFE690965BD110016AC38 /* SyntaxStyle.java */; };
+ 33AF61840965C54B00B514A9 /* Uploader.java in Sources */ = {isa = PBXBuildFile; fileRef = 33FFFE740965BD110016AC38 /* Uploader.java */; };
+ 33AF61850965C54B00B514A9 /* RunnerException.java in Sources */ = {isa = PBXBuildFile; fileRef = 33FFFE580965BD110016AC38 /* RunnerException.java */; };
+ 33AF61860965C54B00B514A9 /* WParser.java in Sources */ = {isa = PBXBuildFile; fileRef = 33FFFE4E0965BD110016AC38 /* WParser.java */; };
+ 33AF61870965C54B00B514A9 /* TextAreaPainter.java in Sources */ = {isa = PBXBuildFile; fileRef = 33FFFE6C0965BD110016AC38 /* TextAreaPainter.java */; };
+ 33AF61880965C54B00B514A9 /* Sketchbook.java in Sources */ = {isa = PBXBuildFile; fileRef = 33FFFE5B0965BD110016AC38 /* Sketchbook.java */; };
+ 33AF61890965C54B00B514A9 /* EditorStatus.java in Sources */ = {isa = PBXBuildFile; fileRef = 33FFFE2D0965BD110016AC38 /* EditorStatus.java */; };
+ 33AF618A0965C54B00B514A9 /* WTokenTypes.java in Sources */ = {isa = PBXBuildFile; fileRef = 33FFFE4F0965BD110016AC38 /* WTokenTypes.java */; };
+ 33AF618B0965C54B00B514A9 /* TextAreaDefaults.java in Sources */ = {isa = PBXBuildFile; fileRef = 33FFFE6B0965BD110016AC38 /* TextAreaDefaults.java */; };
+ 33AF618C0965C54B00B514A9 /* PdePreprocessor.java in Sources */ = {isa = PBXBuildFile; fileRef = 33FFFE3C0965BD110016AC38 /* PdePreprocessor.java */; };
+ 33AF618D0965C54B00B514A9 /* CSymbolTable.java in Sources */ = {isa = PBXBuildFile; fileRef = 33FFFE350965BD110016AC38 /* CSymbolTable.java */; };
+ 33AF618E0965C54B00B514A9 /* SketchHistory.java in Sources */ = {isa = PBXBuildFile; fileRef = 33FFFE5D0965BD110016AC38 /* SketchHistory.java */; };
+ 33AF618F0965C54B00B514A9 /* RunnerClassLoader.java in Sources */ = {isa = PBXBuildFile; fileRef = 33FFFE570965BD110016AC38 /* RunnerClassLoader.java */; };
+ 33AF61900965C54B00B514A9 /* MessageStream.java in Sources */ = {isa = PBXBuildFile; fileRef = 33FFFE320965BD110016AC38 /* MessageStream.java */; };
+ 33AF61910965C54B00B514A9 /* SyntaxUtilities.java in Sources */ = {isa = PBXBuildFile; fileRef = 33FFFE6A0965BD110016AC38 /* SyntaxUtilities.java */; };
+ 33AF61930965C54B00B514A9 /* PresentMode.java in Sources */ = {isa = PBXBuildFile; fileRef = 33FFFE550965BD110016AC38 /* PresentMode.java */; };
+ 33AF61940965C54B00B514A9 /* STDCTokenTypes.java in Sources */ = {isa = PBXBuildFile; fileRef = 33FFFE410965BD110016AC38 /* STDCTokenTypes.java */; };
+ 33AF61950965C54B00B514A9 /* CTokenMarker.java in Sources */ = {isa = PBXBuildFile; fileRef = 33FFFE600965BD110016AC38 /* CTokenMarker.java */; };
+ 33AF61960965C54B00B514A9 /* CToken.java in Sources */ = {isa = PBXBuildFile; fileRef = 33FFFE360965BD110016AC38 /* CToken.java */; };
+ 33AF61970965C54B00B514A9 /* WTreeParserTokenTypes.java in Sources */ = {isa = PBXBuildFile; fileRef = 33FFFE530965BD110016AC38 /* WTreeParserTokenTypes.java */; };
+ 33AF61990965C54B00B514A9 /* Runner.java in Sources */ = {isa = PBXBuildFile; fileRef = 33FFFE560965BD110016AC38 /* Runner.java */; };
+ 33AF619A0965C54B00B514A9 /* TNode.java in Sources */ = {isa = PBXBuildFile; fileRef = 33FFFE430965BD110016AC38 /* TNode.java */; };
+ 33AF619B0965C54B00B514A9 /* KeywordMap.java in Sources */ = {isa = PBXBuildFile; fileRef = 33FFFE640965BD110016AC38 /* KeywordMap.java */; };
+ 33AF619C0965C54B00B514A9 /* ExtendedCommonASTWithHiddenTokens.java in Sources */ = {isa = PBXBuildFile; fileRef = 33FFFE390965BD110016AC38 /* ExtendedCommonASTWithHiddenTokens.java */; };
+ 33AF619D0965C54B00B514A9 /* Sketch.java in Sources */ = {isa = PBXBuildFile; fileRef = 33FFFE5A0965BD110016AC38 /* Sketch.java */; };
+ 33AF619E0965C54B00B514A9 /* WEmitterTokenTypes.java in Sources */ = {isa = PBXBuildFile; fileRef = 33FFFE470965BD110016AC38 /* WEmitterTokenTypes.java */; };
+ 33AF619F0965C54B00B514A9 /* TNodeFactory.java in Sources */ = {isa = PBXBuildFile; fileRef = 33FFFE440965BD110016AC38 /* TNodeFactory.java */; };
+ 33AF61A00965C54B00B514A9 /* Target.java in Sources */ = {isa = PBXBuildFile; fileRef = 33FFFE700965BD110016AC38 /* Target.java */; };
+ 33AF61A10965C54B00B514A9 /* UpdateCheck.java in Sources */ = {isa = PBXBuildFile; fileRef = 33FFFE730965BD110016AC38 /* UpdateCheck.java */; };
+ 33AF61A20965C54B00B514A9 /* InputHandler.java in Sources */ = {isa = PBXBuildFile; fileRef = 33FFFE620965BD110016AC38 /* InputHandler.java */; };
+ 33AF61A30965C54B00B514A9 /* MessageConsumer.java in Sources */ = {isa = PBXBuildFile; fileRef = 33FFFE300965BD110016AC38 /* MessageConsumer.java */; };
+ 33AF61A40965C54B00B514A9 /* WLexer.java in Sources */ = {isa = PBXBuildFile; fileRef = 33FFFE4A0965BD110016AC38 /* WLexer.java */; };
+ 33AF61A50965C54B00B514A9 /* Compiler.java in Sources */ = {isa = PBXBuildFile; fileRef = 33FFFE260965BD100016AC38 /* Compiler.java */; };
+ 33AF61A60965C54B00B514A9 /* AutoFormat.java in Sources */ = {isa = PBXBuildFile; fileRef = 33FFFE720965BD110016AC38 /* AutoFormat.java */; };
+ 33AF61A70965C54B00B514A9 /* StdCLexer.java in Sources */ = {isa = PBXBuildFile; fileRef = 33FFFE3E0965BD110016AC38 /* StdCLexer.java */; };
+ 33AF61A80965C54B00B514A9 /* StdCParser.java in Sources */ = {isa = PBXBuildFile; fileRef = 33FFFE400965BD110016AC38 /* StdCParser.java */; };
+ 33AF61A90965C54B00B514A9 /* PdeKeywords.java in Sources */ = {isa = PBXBuildFile; fileRef = 33FFFE650965BD110016AC38 /* PdeKeywords.java */; };
+ 33AF61AA0965C54B00B514A9 /* Editor.java in Sources */ = {isa = PBXBuildFile; fileRef = 33FFFE270965BD100016AC38 /* Editor.java */; };
+ 33AF61AB0965C54B00B514A9 /* WEmitter.java in Sources */ = {isa = PBXBuildFile; fileRef = 33FFFE460965BD110016AC38 /* WEmitter.java */; };
+ 33AF61AC0965C54B00B514A9 /* SwingWorker.java in Sources */ = {isa = PBXBuildFile; fileRef = 33FFFE5E0965BD110016AC38 /* SwingWorker.java */; };
+ 33AF61AD0965C54B00B514A9 /* DefaultInputHandler.java in Sources */ = {isa = PBXBuildFile; fileRef = 33FFFE610965BD110016AC38 /* DefaultInputHandler.java */; };
+ 33AF61AE0965C54B00B514A9 /* SyntaxDocument.java in Sources */ = {isa = PBXBuildFile; fileRef = 33FFFE680965BD110016AC38 /* SyntaxDocument.java */; };
+ 33AF61AF0965C54B00B514A9 /* WLexerTokenTypes.java in Sources */ = {isa = PBXBuildFile; fileRef = 33FFFE4B0965BD110016AC38 /* WLexerTokenTypes.java */; };
+ 33AF61B00965C54B00B514A9 /* Token.java in Sources */ = {isa = PBXBuildFile; fileRef = 33FFFE6E0965BD110016AC38 /* Token.java */; };
+ 33AF61B10965C54B00B514A9 /* Preferences.java in Sources */ = {isa = PBXBuildFile; fileRef = 33FFFE330965BD110016AC38 /* Preferences.java */; };
+ 33AF61B20965C54B00B514A9 /* PdeTextAreaDefaults.java in Sources */ = {isa = PBXBuildFile; fileRef = 33FFFE660965BD110016AC38 /* PdeTextAreaDefaults.java */; };
+ 33AF61B30965C54B00B514A9 /* WTreeParser.java in Sources */ = {isa = PBXBuildFile; fileRef = 33FFFE520965BD110016AC38 /* WTreeParser.java */; };
+ 33AF61B40965C54B00B514A9 /* JEditTextArea.java in Sources */ = {isa = PBXBuildFile; fileRef = 33FFFE630965BD110016AC38 /* JEditTextArea.java */; };
+ 33AF61B50965C54B00B514A9 /* Base.java in Sources */ = {isa = PBXBuildFile; fileRef = 33FFFE240965BD100016AC38 /* Base.java */; };
+ 33CF03B209662CB700F2C9A9 /* arduino.icns in Resources */ = {isa = PBXBuildFile; fileRef = 33CF03B009662CA800F2C9A9 /* arduino.icns */; };
+ 33CF03CC09662DC000F2C9A9 /* mrj.jar in CopyFiles */ = {isa = PBXBuildFile; fileRef = 33AF620C0965D67900B514A9 /* mrj.jar */; settings = {JAVA_ARCHIVE_SUBDIR = ../shared/lib; }; };
+ 33CF03CD09662DC000F2C9A9 /* RXTXcomm.jar in CopyFiles */ = {isa = PBXBuildFile; fileRef = 33AF620F0965D67A00B514A9 /* RXTXcomm.jar */; settings = {JAVA_ARCHIVE_SUBDIR = ../shared/lib; }; };
+ 33CF03CE09662DC000F2C9A9 /* antlr.jar in CopyFiles */ = {isa = PBXBuildFile; fileRef = 33AF620A0965D67800B514A9 /* antlr.jar */; settings = {JAVA_ARCHIVE_SUBDIR = ../shared/lib; }; };
+ 33CF03CF09662DC000F2C9A9 /* registry.jar in CopyFiles */ = {isa = PBXBuildFile; fileRef = 33AF620E0965D67A00B514A9 /* registry.jar */; settings = {JAVA_ARCHIVE_SUBDIR = ../shared/lib; }; };
+ 33CF03D009662DC000F2C9A9 /* oro.jar in CopyFiles */ = {isa = PBXBuildFile; fileRef = 33AF620D0965D67900B514A9 /* oro.jar */; settings = {JAVA_ARCHIVE_SUBDIR = ../shared/lib; }; };
+ 33FF07020965BEE60016AC38 /* jikes in CopyFiles */ = {isa = PBXBuildFile; fileRef = 33FFFEB60965BD110016AC38 /* jikes */; };
+ 33FF07050965BEE60016AC38 /* macosx_setup.command in CopyFiles */ = {isa = PBXBuildFile; fileRef = 33FFFEB90965BD110016AC38 /* macosx_setup.command */; };
+ 33FF07100965BF8A0016AC38 /* burn.command in CopyFiles */ = {isa = PBXBuildFile; fileRef = 33FFFEAF0965BD110016AC38 /* burn.command */; };
+ 33FF07150965BFC10016AC38 /* FTDIUSBSerialDriver_v2_0_1.dmg in CopyFiles */ = {isa = PBXBuildFile; fileRef = 33FFFEB30965BD110016AC38 /* FTDIUSBSerialDriver_v2_0_1.dmg */; };
+ 33FF07160965BFC10016AC38 /* KeyspanUSAdrvr20.dmg in CopyFiles */ = {isa = PBXBuildFile; fileRef = 33FFFEB40965BD110016AC38 /* KeyspanUSAdrvr20.dmg */; };
+ 33FF071F0965C1E30016AC38 /* about.jpg in CopyFiles */ = {isa = PBXBuildFile; fileRef = 33FF01DE0965BD160016AC38 /* about.jpg */; };
+ 33FF07220965C1E30016AC38 /* buttons.gif in CopyFiles */ = {isa = PBXBuildFile; fileRef = 33FF02770965BD160016AC38 /* buttons.gif */; };
+ 33FF07230965C1E30016AC38 /* icon.gif in CopyFiles */ = {isa = PBXBuildFile; fileRef = 33FF02780965BD160016AC38 /* icon.gif */; };
+ 33FF07240965C1E30016AC38 /* keywords.txt in CopyFiles */ = {isa = PBXBuildFile; fileRef = 33FF02790965BD160016AC38 /* keywords.txt */; };
+ 33FF07250965C1E30016AC38 /* loading.gif in CopyFiles */ = {isa = PBXBuildFile; fileRef = 33FF027A0965BD160016AC38 /* loading.gif */; };
+ 33FF07280965C1E30016AC38 /* preferences.txt in CopyFiles */ = {isa = PBXBuildFile; fileRef = 33FF027D0965BD160016AC38 /* preferences.txt */; };
+ 33FF072A0965C1E30016AC38 /* resize.gif in CopyFiles */ = {isa = PBXBuildFile; fileRef = 33FF027F0965BD160016AC38 /* resize.gif */; };
+ 33FF072C0965C1E30016AC38 /* tab-sel-left.gif in CopyFiles */ = {isa = PBXBuildFile; fileRef = 33FF02810965BD160016AC38 /* tab-sel-left.gif */; };
+ 33FF072D0965C1E30016AC38 /* tab-sel-menu.gif in CopyFiles */ = {isa = PBXBuildFile; fileRef = 33FF02820965BD160016AC38 /* tab-sel-menu.gif */; };
+ 33FF072E0965C1E30016AC38 /* tab-sel-mid.gif in CopyFiles */ = {isa = PBXBuildFile; fileRef = 33FF02830965BD160016AC38 /* tab-sel-mid.gif */; };
+ 33FF072F0965C1E30016AC38 /* tab-sel-right.gif in CopyFiles */ = {isa = PBXBuildFile; fileRef = 33FF02840965BD160016AC38 /* tab-sel-right.gif */; };
+ 33FF07300965C1E30016AC38 /* tab-unsel-left.gif in CopyFiles */ = {isa = PBXBuildFile; fileRef = 33FF02850965BD160016AC38 /* tab-unsel-left.gif */; };
+ 33FF07310965C1E30016AC38 /* tab-unsel-menu.gif in CopyFiles */ = {isa = PBXBuildFile; fileRef = 33FF02860965BD160016AC38 /* tab-unsel-menu.gif */; };
+ 33FF07320965C1E30016AC38 /* tab-unsel-mid.gif in CopyFiles */ = {isa = PBXBuildFile; fileRef = 33FF02870965BD160016AC38 /* tab-unsel-mid.gif */; };
+ 33FF07330965C1E30016AC38 /* tab-unsel-right.gif in CopyFiles */ = {isa = PBXBuildFile; fileRef = 33FF02880965BD160016AC38 /* tab-unsel-right.gif */; };
+ 33FF07360965C2590016AC38 /* ATmegaBOOT.hex in CopyFiles */ = {isa = PBXBuildFile; fileRef = 33FFFE790965BD110016AC38 /* ATmegaBOOT.hex */; };
+ 33FF07D30965C2B10016AC38 /* avrlib in CopyFiles */ = {isa = PBXBuildFile; fileRef = 33FF07370965C2B10016AC38 /* avrlib */; };
+ 33FF07FD0965C3560016AC38 /* targets in CopyFiles */ = {isa = PBXBuildFile; fileRef = 33FF07D50965C3560016AC38 /* targets */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXBuildStyle section */
+ 33AF609C0965C4B700B514A9 /* Development */ = {
+ isa = PBXBuildStyle;
+ buildSettings = {
+ COPY_PHASE_STRIP = NO;
+ };
+ name = Development;
+ };
+ 33AF609D0965C4B700B514A9 /* Deployment */ = {
+ isa = PBXBuildStyle;
+ buildSettings = {
+ COPY_PHASE_STRIP = YES;
+ };
+ name = Deployment;
+ };
+/* End PBXBuildStyle section */
+
+/* Begin PBXContainerItemProxy section */
+ 33AF61700965C51E00B514A9 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 33FFFD3F0965B1E40016AC38 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 33FFFE1C0965BBEF0016AC38;
+ remoteInfo = Dist;
+ };
+/* End PBXContainerItemProxy section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+ 33CF03C809662DA200F2C9A9 /* CopyFiles */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 15;
+ files = (
+ 33CF03CC09662DC000F2C9A9 /* mrj.jar in CopyFiles */,
+ 33CF03CD09662DC000F2C9A9 /* RXTXcomm.jar in CopyFiles */,
+ 33CF03CE09662DC000F2C9A9 /* antlr.jar in CopyFiles */,
+ 33CF03CF09662DC000F2C9A9 /* registry.jar in CopyFiles */,
+ 33CF03D009662DC000F2C9A9 /* oro.jar in CopyFiles */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 33FF070C0965BF760016AC38 /* CopyFiles */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = bootloader;
+ dstSubfolderSpec = 16;
+ files = (
+ 33FF07360965C2590016AC38 /* ATmegaBOOT.hex in CopyFiles */,
+ 33FF07100965BF8A0016AC38 /* burn.command in CopyFiles */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 33FF07130965BFA80016AC38 /* CopyFiles */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = drivers;
+ dstSubfolderSpec = 16;
+ files = (
+ 33FF07150965BFC10016AC38 /* FTDIUSBSerialDriver_v2_0_1.dmg in CopyFiles */,
+ 33FF07160965BFC10016AC38 /* KeyspanUSAdrvr20.dmg in CopyFiles */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 33FF071D0965C1C20016AC38 /* CopyFiles */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = lib;
+ dstSubfolderSpec = 16;
+ files = (
+ 33FF07FD0965C3560016AC38 /* targets in CopyFiles */,
+ 33FF07D30965C2B10016AC38 /* avrlib in CopyFiles */,
+ 33FF071F0965C1E30016AC38 /* about.jpg in CopyFiles */,
+ 33FF07220965C1E30016AC38 /* buttons.gif in CopyFiles */,
+ 33FF07230965C1E30016AC38 /* icon.gif in CopyFiles */,
+ 33FF07240965C1E30016AC38 /* keywords.txt in CopyFiles */,
+ 33FF07250965C1E30016AC38 /* loading.gif in CopyFiles */,
+ 33FF07280965C1E30016AC38 /* preferences.txt in CopyFiles */,
+ 33FF072A0965C1E30016AC38 /* resize.gif in CopyFiles */,
+ 33FF072C0965C1E30016AC38 /* tab-sel-left.gif in CopyFiles */,
+ 33FF072D0965C1E30016AC38 /* tab-sel-menu.gif in CopyFiles */,
+ 33FF072E0965C1E30016AC38 /* tab-sel-mid.gif in CopyFiles */,
+ 33FF072F0965C1E30016AC38 /* tab-sel-right.gif in CopyFiles */,
+ 33FF07300965C1E30016AC38 /* tab-unsel-left.gif in CopyFiles */,
+ 33FF07310965C1E30016AC38 /* tab-unsel-menu.gif in CopyFiles */,
+ 33FF07320965C1E30016AC38 /* tab-unsel-mid.gif in CopyFiles */,
+ 33FF07330965C1E30016AC38 /* tab-unsel-right.gif in CopyFiles */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 33FFFE1D0965BC050016AC38 /* CopyFiles */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 16;
+ files = (
+ 33FF07020965BEE60016AC38 /* jikes in CopyFiles */,
+ 33FF07050965BEE60016AC38 /* macosx_setup.command in CopyFiles */,
+ 330B21540968180400345666 /* librxtxSerial.jnilib in CopyFiles */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+ 330B21530968180400345666 /* librxtxSerial.jnilib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.bundle"; path = librxtxSerial.jnilib; sourceTree = ""; };
+ 33AF620A0965D67800B514A9 /* antlr.jar */ = {isa = PBXFileReference; lastKnownFileType = archive.jar; path = antlr.jar; sourceTree = ""; };
+ 33AF620B0965D67900B514A9 /* applet.html */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.html; path = applet.html; sourceTree = ""; };
+ 33AF620C0965D67900B514A9 /* mrj.jar */ = {isa = PBXFileReference; lastKnownFileType = archive.jar; path = mrj.jar; sourceTree = ""; };
+ 33AF620D0965D67900B514A9 /* oro.jar */ = {isa = PBXFileReference; lastKnownFileType = archive.jar; path = oro.jar; sourceTree = ""; };
+ 33AF620E0965D67A00B514A9 /* registry.jar */ = {isa = PBXFileReference; lastKnownFileType = archive.jar; path = registry.jar; sourceTree = ""; };
+ 33AF620F0965D67A00B514A9 /* RXTXcomm.jar */ = {isa = PBXFileReference; lastKnownFileType = archive.jar; path = RXTXcomm.jar; sourceTree = ""; };
+ 33CF03B009662CA800F2C9A9 /* arduino.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; name = arduino.icns; path = dist/arduino.icns; sourceTree = ""; };
+ 33DD8FB6096AC8DA0013AF8F /* Arduino.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Arduino.app; sourceTree = BUILT_PRODUCTS_DIR; };
+ 33FF01DC0965BD160016AC38 /* examples.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = examples.zip; sourceTree = ""; };
+ 33FF01DE0965BD160016AC38 /* about.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = about.jpg; sourceTree = ""; };
+ 33FF02770965BD160016AC38 /* buttons.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = buttons.gif; sourceTree = ""; };
+ 33FF02780965BD160016AC38 /* icon.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = icon.gif; sourceTree = ""; };
+ 33FF02790965BD160016AC38 /* keywords.txt */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = keywords.txt; sourceTree = ""; };
+ 33FF027A0965BD160016AC38 /* loading.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = loading.gif; sourceTree = ""; };
+ 33FF027D0965BD160016AC38 /* preferences.txt */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = preferences.txt; sourceTree = ""; };
+ 33FF027F0965BD160016AC38 /* resize.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = resize.gif; sourceTree = ""; };
+ 33FF02810965BD160016AC38 /* tab-sel-left.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = "tab-sel-left.gif"; sourceTree = ""; };
+ 33FF02820965BD160016AC38 /* tab-sel-menu.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = "tab-sel-menu.gif"; sourceTree = ""; };
+ 33FF02830965BD160016AC38 /* tab-sel-mid.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = "tab-sel-mid.gif"; sourceTree = ""; };
+ 33FF02840965BD160016AC38 /* tab-sel-right.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = "tab-sel-right.gif"; sourceTree = ""; };
+ 33FF02850965BD160016AC38 /* tab-unsel-left.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = "tab-unsel-left.gif"; sourceTree = ""; };
+ 33FF02860965BD160016AC38 /* tab-unsel-menu.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = "tab-unsel-menu.gif"; sourceTree = ""; };
+ 33FF02870965BD160016AC38 /* tab-unsel-mid.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = "tab-unsel-mid.gif"; sourceTree = ""; };
+ 33FF02880965BD160016AC38 /* tab-unsel-right.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = "tab-unsel-right.gif"; sourceTree = ""; };
+ 33FF028B0965BD160016AC38 /* run.bat */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = run.bat; sourceTree = ""; };
+ 33FF02900965BD160016AC38 /* .cvsignore */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = .cvsignore; sourceTree = ""; };
+ 33FF02920965BD160016AC38 /* avr_tools.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = avr_tools.zip; sourceTree = ""; };
+ 33FF02940965BD160016AC38 /* burn.bat */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = burn.bat; sourceTree = ""; };
+ 33FF02960965BD160016AC38 /* makefile.w2k */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = makefile.w2k; sourceTree = ""; };
+ 33FF02970965BD160016AC38 /* makefile.win */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = makefile.win; sourceTree = ""; };
+ 33FF02990965BD160016AC38 /* FTDI USB Drivers.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = "FTDI USB Drivers.zip"; sourceTree = ""; };
+ 33FF029A0965BD160016AC38 /* KeyspanUSA19wWinV31.exe */ = {isa = PBXFileReference; lastKnownFileType = file; path = KeyspanUSA19wWinV31.exe; sourceTree = ""; };
+ 33FF029B0965BD160016AC38 /* ICE_JNIRegistry.dll */ = {isa = PBXFileReference; lastKnownFileType = file; path = ICE_JNIRegistry.dll; sourceTree = ""; };
+ 33FF029C0965BD160016AC38 /* jikes.exe */ = {isa = PBXFileReference; lastKnownFileType = file; path = jikes.exe; sourceTree = ""; };
+ 33FF029E0965BD170016AC38 /* makefile.w2k */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = makefile.w2k; sourceTree = ""; };
+ 33FF029F0965BD170016AC38 /* makefile.win */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = makefile.win; sourceTree = ""; };
+ 33FF02A00965BD170016AC38 /* run-expert.bat */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = "run-expert.bat"; sourceTree = ""; };
+ 33FF02A10965BD170016AC38 /* run.bat */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = run.bat; sourceTree = ""; };
+ 33FF02A20965BD170016AC38 /* rxtxSerial.dll */ = {isa = PBXFileReference; lastKnownFileType = file; path = rxtxSerial.dll; sourceTree = ""; };
+ 33FF02A40965BD170016AC38 /* dist.sh */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.script.sh; path = dist.sh; sourceTree = ""; };
+ 33FF02A50965BD170016AC38 /* jre.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = jre.zip; sourceTree = ""; };
+ 33FF02A70965BD170016AC38 /* .cvsignore */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = .cvsignore; sourceTree = ""; };
+ 33FF02A80965BD170016AC38 /* application.ico */ = {isa = PBXFileReference; lastKnownFileType = image.ico; path = application.ico; sourceTree = ""; };
+ 33FF02A90965BD170016AC38 /* document.ico */ = {isa = PBXFileReference; lastKnownFileType = image.ico; path = document.ico; sourceTree = ""; };
+ 33FF02AA0965BD170016AC38 /* launcher.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = launcher.cpp; sourceTree = ""; };
+ 33FF02AB0965BD170016AC38 /* launcher.rc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = launcher.rc; sourceTree = ""; };
+ 33FF02AC0965BD170016AC38 /* Makefile */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; };
+ 33FF02AE0965BD170016AC38 /* make.sh */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.script.sh; path = make.sh; sourceTree = ""; };
+ 33FF02AF0965BD170016AC38 /* run.sh */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.script.sh; path = run.sh; sourceTree = ""; };
+ 33FF02B00965BD170016AC38 /* srun.sh */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.script.sh; path = srun.sh; sourceTree = ""; };
+ 33FF02B60965BD170016AC38 /* license.txt */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; name = license.txt; path = ../../license.txt; sourceTree = SOURCE_ROOT; };
+ 33FF02B70965BD170016AC38 /* readme.txt */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; name = readme.txt; path = ../../readme.txt; sourceTree = SOURCE_ROOT; };
+ 33FF02DC0965BD170016AC38 /* todo.txt */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; name = todo.txt; path = ../../todo.txt; sourceTree = SOURCE_ROOT; };
+ 33FF07370965C2B10016AC38 /* avrlib */ = {isa = PBXFileReference; lastKnownFileType = folder; path = avrlib; sourceTree = ""; };
+ 33FF07D50965C3560016AC38 /* targets */ = {isa = PBXFileReference; lastKnownFileType = folder; name = targets; path = ../../targets; sourceTree = SOURCE_ROOT; };
+ 33FFFE240965BD100016AC38 /* Base.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = Base.java; sourceTree = ""; };
+ 33FFFE260965BD100016AC38 /* Compiler.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = Compiler.java; sourceTree = ""; };
+ 33FFFE270965BD100016AC38 /* Editor.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = Editor.java; sourceTree = ""; };
+ 33FFFE280965BD100016AC38 /* EditorButtons.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = EditorButtons.java; sourceTree = ""; };
+ 33FFFE290965BD110016AC38 /* EditorConsole.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = EditorConsole.java; sourceTree = ""; };
+ 33FFFE2A0965BD110016AC38 /* EditorHeader.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = EditorHeader.java; sourceTree = ""; };
+ 33FFFE2B0965BD110016AC38 /* EditorLineStatus.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = EditorLineStatus.java; sourceTree = ""; };
+ 33FFFE2C0965BD110016AC38 /* EditorListener.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = EditorListener.java; sourceTree = ""; };
+ 33FFFE2D0965BD110016AC38 /* EditorStatus.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = EditorStatus.java; sourceTree = ""; };
+ 33FFFE2E0965BD110016AC38 /* FindReplace.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = FindReplace.java; sourceTree = ""; };
+ 33FFFE300965BD110016AC38 /* MessageConsumer.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = MessageConsumer.java; sourceTree = ""; };
+ 33FFFE310965BD110016AC38 /* MessageSiphon.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = MessageSiphon.java; sourceTree = ""; };
+ 33FFFE320965BD110016AC38 /* MessageStream.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = MessageStream.java; sourceTree = ""; };
+ 33FFFE330965BD110016AC38 /* Preferences.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = Preferences.java; sourceTree = ""; };
+ 33FFFE350965BD110016AC38 /* CSymbolTable.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = CSymbolTable.java; sourceTree = ""; };
+ 33FFFE360965BD110016AC38 /* CToken.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = CToken.java; sourceTree = ""; };
+ 33FFFE370965BD110016AC38 /* expandedWEmitter.g */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = expandedWEmitter.g; sourceTree = ""; };
+ 33FFFE380965BD110016AC38 /* expandedWParser.g */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = expandedWParser.g; sourceTree = ""; };
+ 33FFFE390965BD110016AC38 /* ExtendedCommonASTWithHiddenTokens.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = ExtendedCommonASTWithHiddenTokens.java; sourceTree = ""; };
+ 33FFFE3A0965BD110016AC38 /* LineObject.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = LineObject.java; sourceTree = ""; };
+ 33FFFE3B0965BD110016AC38 /* Makefile */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; };
+ 33FFFE3C0965BD110016AC38 /* PdePreprocessor.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = PdePreprocessor.java; sourceTree = ""; };
+ 33FFFE3D0965BD110016AC38 /* PreprocessorInfoChannel.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = PreprocessorInfoChannel.java; sourceTree = ""; };
+ 33FFFE3E0965BD110016AC38 /* StdCLexer.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = StdCLexer.java; sourceTree = ""; };
+ 33FFFE3F0965BD110016AC38 /* StdCParser.g */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = StdCParser.g; sourceTree = ""; };
+ 33FFFE400965BD110016AC38 /* StdCParser.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = StdCParser.java; sourceTree = ""; };
+ 33FFFE410965BD110016AC38 /* STDCTokenTypes.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = STDCTokenTypes.java; sourceTree = ""; };
+ 33FFFE420965BD110016AC38 /* STDCTokenTypes.txt */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = STDCTokenTypes.txt; sourceTree = ""; };
+ 33FFFE430965BD110016AC38 /* TNode.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = TNode.java; sourceTree = ""; };
+ 33FFFE440965BD110016AC38 /* TNodeFactory.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = TNodeFactory.java; sourceTree = ""; };
+ 33FFFE450965BD110016AC38 /* WEmitter.g */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = WEmitter.g; sourceTree = ""; };
+ 33FFFE460965BD110016AC38 /* WEmitter.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = WEmitter.java; sourceTree = ""; };
+ 33FFFE470965BD110016AC38 /* WEmitterTokenTypes.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = WEmitterTokenTypes.java; sourceTree = ""; };
+ 33FFFE480965BD110016AC38 /* WEmitterTokenTypes.txt */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = WEmitterTokenTypes.txt; sourceTree = ""; };
+ 33FFFE490965BD110016AC38 /* whitespace_test.pde */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = whitespace_test.pde; sourceTree = ""; };
+ 33FFFE4A0965BD110016AC38 /* WLexer.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = WLexer.java; sourceTree = ""; };
+ 33FFFE4B0965BD110016AC38 /* WLexerTokenTypes.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = WLexerTokenTypes.java; sourceTree = ""; };
+ 33FFFE4C0965BD110016AC38 /* WLexerTokenTypes.txt */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = WLexerTokenTypes.txt; sourceTree = ""; };
+ 33FFFE4D0965BD110016AC38 /* WParser.g */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = WParser.g; sourceTree = ""; };
+ 33FFFE4E0965BD110016AC38 /* WParser.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = WParser.java; sourceTree = ""; };
+ 33FFFE4F0965BD110016AC38 /* WTokenTypes.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = WTokenTypes.java; sourceTree = ""; };
+ 33FFFE500965BD110016AC38 /* WTokenTypes.txt */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = WTokenTypes.txt; sourceTree = ""; };
+ 33FFFE510965BD110016AC38 /* WTreeParser.g */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = WTreeParser.g; sourceTree = ""; };
+ 33FFFE520965BD110016AC38 /* WTreeParser.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = WTreeParser.java; sourceTree = ""; };
+ 33FFFE530965BD110016AC38 /* WTreeParserTokenTypes.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = WTreeParserTokenTypes.java; sourceTree = ""; };
+ 33FFFE540965BD110016AC38 /* WTreeParserTokenTypes.txt */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = WTreeParserTokenTypes.txt; sourceTree = ""; };
+ 33FFFE550965BD110016AC38 /* PresentMode.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = PresentMode.java; sourceTree = ""; };
+ 33FFFE560965BD110016AC38 /* Runner.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = Runner.java; sourceTree = ""; };
+ 33FFFE570965BD110016AC38 /* RunnerClassLoader.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = RunnerClassLoader.java; sourceTree = ""; };
+ 33FFFE580965BD110016AC38 /* RunnerException.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = RunnerException.java; sourceTree = ""; };
+ 33FFFE590965BD110016AC38 /* Serial.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = Serial.java; sourceTree = ""; };
+ 33FFFE5A0965BD110016AC38 /* Sketch.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = Sketch.java; sourceTree = ""; };
+ 33FFFE5B0965BD110016AC38 /* Sketchbook.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = Sketchbook.java; sourceTree = ""; };
+ 33FFFE5C0965BD110016AC38 /* SketchCode.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = SketchCode.java; sourceTree = ""; };
+ 33FFFE5D0965BD110016AC38 /* SketchHistory.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = SketchHistory.java; sourceTree = ""; };
+ 33FFFE5E0965BD110016AC38 /* SwingWorker.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = SwingWorker.java; sourceTree = ""; };
+ 33FFFE600965BD110016AC38 /* CTokenMarker.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = CTokenMarker.java; sourceTree = ""; };
+ 33FFFE610965BD110016AC38 /* DefaultInputHandler.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = DefaultInputHandler.java; sourceTree = ""; };
+ 33FFFE620965BD110016AC38 /* InputHandler.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = InputHandler.java; sourceTree = ""; };
+ 33FFFE630965BD110016AC38 /* JEditTextArea.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = JEditTextArea.java; sourceTree = ""; };
+ 33FFFE640965BD110016AC38 /* KeywordMap.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = KeywordMap.java; sourceTree = ""; };
+ 33FFFE650965BD110016AC38 /* PdeKeywords.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = PdeKeywords.java; sourceTree = ""; };
+ 33FFFE660965BD110016AC38 /* PdeTextAreaDefaults.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = PdeTextAreaDefaults.java; sourceTree = ""; };
+ 33FFFE670965BD110016AC38 /* readme.txt */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = readme.txt; sourceTree = ""; };
+ 33FFFE680965BD110016AC38 /* SyntaxDocument.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = SyntaxDocument.java; sourceTree = ""; };
+ 33FFFE690965BD110016AC38 /* SyntaxStyle.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = SyntaxStyle.java; sourceTree = ""; };
+ 33FFFE6A0965BD110016AC38 /* SyntaxUtilities.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = SyntaxUtilities.java; sourceTree = ""; };
+ 33FFFE6B0965BD110016AC38 /* TextAreaDefaults.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = TextAreaDefaults.java; sourceTree = ""; };
+ 33FFFE6C0965BD110016AC38 /* TextAreaPainter.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = TextAreaPainter.java; sourceTree = ""; };
+ 33FFFE6D0965BD110016AC38 /* TextUtilities.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = TextUtilities.java; sourceTree = ""; };
+ 33FFFE6E0965BD110016AC38 /* Token.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = Token.java; sourceTree = ""; };
+ 33FFFE6F0965BD110016AC38 /* TokenMarker.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = TokenMarker.java; sourceTree = ""; };
+ 33FFFE700965BD110016AC38 /* Target.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = Target.java; sourceTree = ""; };
+ 33FFFE720965BD110016AC38 /* AutoFormat.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = AutoFormat.java; sourceTree = ""; };
+ 33FFFE730965BD110016AC38 /* UpdateCheck.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = UpdateCheck.java; sourceTree = ""; };
+ 33FFFE740965BD110016AC38 /* Uploader.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = Uploader.java; sourceTree = ""; };
+ 33FFFE770965BD110016AC38 /* ATmegaBOOT.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = ATmegaBOOT.c; sourceTree = ""; };
+ 33FFFE790965BD110016AC38 /* ATmegaBOOT.hex */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = ATmegaBOOT.hex; sourceTree = ""; };
+ 33FFFE7F0965BD110016AC38 /* Makefile */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; };
+ 33FFFE810965BD110016AC38 /* howto.txt */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = howto.txt; sourceTree = ""; };
+ 33FFFE830965BD110016AC38 /* .cvsignore */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = .cvsignore; sourceTree = ""; };
+ 33FFFE850965BD110016AC38 /* .cvsignore */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = .cvsignore; sourceTree = ""; };
+ 33FFFE860965BD110016AC38 /* arduino */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.script.sh; path = arduino; sourceTree = ""; };
+ 33FFFE880965BD110016AC38 /* burn */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.script.sh; path = burn; sourceTree = ""; };
+ 33FFFE8A0965BD110016AC38 /* librxtxI2C.so */ = {isa = PBXFileReference; lastKnownFileType = file; path = librxtxI2C.so; sourceTree = ""; };
+ 33FFFE8B0965BD110016AC38 /* librxtxParallel.so */ = {isa = PBXFileReference; lastKnownFileType = file; path = librxtxParallel.so; sourceTree = ""; };
+ 33FFFE8C0965BD110016AC38 /* librxtxRaw.so */ = {isa = PBXFileReference; lastKnownFileType = file; path = librxtxRaw.so; sourceTree = ""; };
+ 33FFFE8D0965BD110016AC38 /* librxtxRS485.so */ = {isa = PBXFileReference; lastKnownFileType = file; path = librxtxRS485.so; sourceTree = ""; };
+ 33FFFE8E0965BD110016AC38 /* librxtxSerial.so */ = {isa = PBXFileReference; lastKnownFileType = file; path = librxtxSerial.so; sourceTree = ""; };
+ 33FFFE8F0965BD110016AC38 /* dist.sh */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.script.sh; path = dist.sh; sourceTree = ""; };
+ 33FFFE900965BD110016AC38 /* make.sh */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.script.sh; path = make.sh; sourceTree = ""; };
+ 33FFFE910965BD110016AC38 /* run.sh */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.script.sh; path = run.sh; sourceTree = ""; };
+ 33FFFE930965BD110016AC38 /* .cvsignore */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = .cvsignore; sourceTree = ""; };
+ 33FFFE940965BD110016AC38 /* Arduino.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = Arduino.xcodeproj; sourceTree = ""; };
+ 33FFFEAF0965BD110016AC38 /* burn.command */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.script.sh; path = burn.command; sourceTree = ""; };
+ 33FFFEB30965BD110016AC38 /* FTDIUSBSerialDriver_v2_0_1.dmg */ = {isa = PBXFileReference; lastKnownFileType = file; path = FTDIUSBSerialDriver_v2_0_1.dmg; sourceTree = ""; };
+ 33FFFEB40965BD110016AC38 /* KeyspanUSAdrvr20.dmg */ = {isa = PBXFileReference; lastKnownFileType = file; path = KeyspanUSAdrvr20.dmg; sourceTree = ""; };
+ 33FFFEB50965BD110016AC38 /* DS_Store */ = {isa = PBXFileReference; lastKnownFileType = file; path = DS_Store; sourceTree = ""; };
+ 33FFFEB60965BD110016AC38 /* jikes */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.executable"; path = jikes; sourceTree = ""; };
+ 33FFFEB90965BD110016AC38 /* macosx_setup.command */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.script.sh; path = macosx_setup.command; sourceTree = ""; };
+ 33FFFEBC0965BD110016AC38 /* tools.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = tools.zip; sourceTree = ""; };
+ 33FFFEBD0965BD110016AC38 /* dist.sh */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.script.sh; path = dist.sh; sourceTree = ""; };
+ 33FFFEBE0965BD110016AC38 /* make.sh */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.script.sh; path = make.sh; sourceTree = ""; };
+ 33FFFEBF0965BD110016AC38 /* mkdmg */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.script.sh; path = mkdmg; sourceTree = ""; };
+ 33FFFEC00965BD110016AC38 /* run.sh */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.script.sh; path = run.sh; sourceTree = ""; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 33AF61670965C4C600B514A9 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 33FF01DA0965BD160016AC38 /* shared */ = {
+ isa = PBXGroup;
+ children = (
+ 33FF01DB0965BD160016AC38 /* dist */,
+ 33FF01DD0965BD160016AC38 /* lib */,
+ 33FF02890965BD160016AC38 /* reference */,
+ 33FF028B0965BD160016AC38 /* run.bat */,
+ 33FF028C0965BD160016AC38 /* sketchbook */,
+ );
+ path = shared;
+ sourceTree = "";
+ };
+ 33FF01DB0965BD160016AC38 /* dist */ = {
+ isa = PBXGroup;
+ children = (
+ 33FF01DC0965BD160016AC38 /* examples.zip */,
+ );
+ path = dist;
+ sourceTree = "";
+ };
+ 33FF01DD0965BD160016AC38 /* lib */ = {
+ isa = PBXGroup;
+ children = (
+ 33AF620A0965D67800B514A9 /* antlr.jar */,
+ 33AF620B0965D67900B514A9 /* applet.html */,
+ 33AF620C0965D67900B514A9 /* mrj.jar */,
+ 33AF620D0965D67900B514A9 /* oro.jar */,
+ 33AF620E0965D67A00B514A9 /* registry.jar */,
+ 33AF620F0965D67A00B514A9 /* RXTXcomm.jar */,
+ 33FF07370965C2B10016AC38 /* avrlib */,
+ 33FF01DE0965BD160016AC38 /* about.jpg */,
+ 33FF02770965BD160016AC38 /* buttons.gif */,
+ 33FF02780965BD160016AC38 /* icon.gif */,
+ 33FF02790965BD160016AC38 /* keywords.txt */,
+ 33FF027A0965BD160016AC38 /* loading.gif */,
+ 33FF027D0965BD160016AC38 /* preferences.txt */,
+ 33FF027F0965BD160016AC38 /* resize.gif */,
+ 33FF02810965BD160016AC38 /* tab-sel-left.gif */,
+ 33FF02820965BD160016AC38 /* tab-sel-menu.gif */,
+ 33FF02830965BD160016AC38 /* tab-sel-mid.gif */,
+ 33FF02840965BD160016AC38 /* tab-sel-right.gif */,
+ 33FF02850965BD160016AC38 /* tab-unsel-left.gif */,
+ 33FF02860965BD160016AC38 /* tab-unsel-menu.gif */,
+ 33FF02870965BD160016AC38 /* tab-unsel-mid.gif */,
+ 33FF02880965BD160016AC38 /* tab-unsel-right.gif */,
+ );
+ path = lib;
+ sourceTree = "";
+ };
+ 33FF02890965BD160016AC38 /* reference */ = {
+ isa = PBXGroup;
+ children = (
+ 33FF028A0965BD160016AC38 /* images */,
+ );
+ path = reference;
+ sourceTree = "";
+ };
+ 33FF028A0965BD160016AC38 /* images */ = {
+ isa = PBXGroup;
+ children = (
+ );
+ path = images;
+ sourceTree = "";
+ };
+ 33FF028C0965BD160016AC38 /* sketchbook */ = {
+ isa = PBXGroup;
+ children = (
+ 33FF028D0965BD160016AC38 /* default */,
+ 33FF028E0965BD160016AC38 /* examples */,
+ );
+ path = sketchbook;
+ sourceTree = "";
+ };
+ 33FF028D0965BD160016AC38 /* default */ = {
+ isa = PBXGroup;
+ children = (
+ );
+ path = default;
+ sourceTree = "";
+ };
+ 33FF028E0965BD160016AC38 /* examples */ = {
+ isa = PBXGroup;
+ children = (
+ );
+ path = examples;
+ sourceTree = "";
+ };
+ 33FF028F0965BD160016AC38 /* windows */ = {
+ isa = PBXGroup;
+ children = (
+ 33FF02900965BD160016AC38 /* .cvsignore */,
+ 33FF02910965BD160016AC38 /* dist */,
+ 33FF02A40965BD170016AC38 /* dist.sh */,
+ 33FF02A50965BD170016AC38 /* jre.zip */,
+ 33FF02A60965BD170016AC38 /* launcher */,
+ 33FF02AE0965BD170016AC38 /* make.sh */,
+ 33FF02AF0965BD170016AC38 /* run.sh */,
+ 33FF02B00965BD170016AC38 /* srun.sh */,
+ );
+ path = windows;
+ sourceTree = "";
+ };
+ 33FF02910965BD160016AC38 /* dist */ = {
+ isa = PBXGroup;
+ children = (
+ 33FF02920965BD160016AC38 /* avr_tools.zip */,
+ 33FF02930965BD160016AC38 /* bootloader */,
+ 33FF02950965BD160016AC38 /* core */,
+ 33FF02980965BD160016AC38 /* drivers */,
+ 33FF029B0965BD160016AC38 /* ICE_JNIRegistry.dll */,
+ 33FF029C0965BD160016AC38 /* jikes.exe */,
+ 33FF029D0965BD160016AC38 /* lib */,
+ 33FF02A00965BD170016AC38 /* run-expert.bat */,
+ 33FF02A10965BD170016AC38 /* run.bat */,
+ 33FF02A20965BD170016AC38 /* rxtxSerial.dll */,
+ 33FF02A30965BD170016AC38 /* serial */,
+ );
+ path = dist;
+ sourceTree = "";
+ };
+ 33FF02930965BD160016AC38 /* bootloader */ = {
+ isa = PBXGroup;
+ children = (
+ 33FF02940965BD160016AC38 /* burn.bat */,
+ );
+ path = bootloader;
+ sourceTree = "";
+ };
+ 33FF02950965BD160016AC38 /* core */ = {
+ isa = PBXGroup;
+ children = (
+ 33FF02960965BD160016AC38 /* makefile.w2k */,
+ 33FF02970965BD160016AC38 /* makefile.win */,
+ );
+ path = core;
+ sourceTree = "";
+ };
+ 33FF02980965BD160016AC38 /* drivers */ = {
+ isa = PBXGroup;
+ children = (
+ 33FF02990965BD160016AC38 /* FTDI USB Drivers.zip */,
+ 33FF029A0965BD160016AC38 /* KeyspanUSA19wWinV31.exe */,
+ );
+ path = drivers;
+ sourceTree = "";
+ };
+ 33FF029D0965BD160016AC38 /* lib */ = {
+ isa = PBXGroup;
+ children = (
+ 33FF029E0965BD170016AC38 /* makefile.w2k */,
+ 33FF029F0965BD170016AC38 /* makefile.win */,
+ );
+ path = lib;
+ sourceTree = "";
+ };
+ 33FF02A30965BD170016AC38 /* serial */ = {
+ isa = PBXGroup;
+ children = (
+ );
+ path = serial;
+ sourceTree = "";
+ };
+ 33FF02A60965BD170016AC38 /* launcher */ = {
+ isa = PBXGroup;
+ children = (
+ 33FF02A70965BD170016AC38 /* .cvsignore */,
+ 33FF02A80965BD170016AC38 /* application.ico */,
+ 33FF02A90965BD170016AC38 /* document.ico */,
+ 33FF02AA0965BD170016AC38 /* launcher.cpp */,
+ 33FF02AB0965BD170016AC38 /* launcher.rc */,
+ 33FF02AC0965BD170016AC38 /* Makefile */,
+ 33FF02AD0965BD170016AC38 /* res */,
+ );
+ path = launcher;
+ sourceTree = "";
+ };
+ 33FF02AD0965BD170016AC38 /* res */ = {
+ isa = PBXGroup;
+ children = (
+ );
+ path = res;
+ sourceTree = "";
+ };
+ 33FFFD3D0965B1E40016AC38 = {
+ isa = PBXGroup;
+ children = (
+ 33CF03B009662CA800F2C9A9 /* arduino.icns */,
+ 33FF07D50965C3560016AC38 /* targets */,
+ 33FFFE220965BD100016AC38 /* app */,
+ 33FFFE750965BD110016AC38 /* bootloader */,
+ 33FFFE800965BD110016AC38 /* build */,
+ 33FF02B60965BD170016AC38 /* license.txt */,
+ 33FF02B70965BD170016AC38 /* readme.txt */,
+ 33FF02DC0965BD170016AC38 /* todo.txt */,
+ 33DD8FB6096AC8DA0013AF8F /* Arduino.app */,
+ );
+ sourceTree = "";
+ };
+ 33FFFE220965BD100016AC38 /* app */ = {
+ isa = PBXGroup;
+ children = (
+ 33FFFE240965BD100016AC38 /* Base.java */,
+ 33FFFE260965BD100016AC38 /* Compiler.java */,
+ 33FFFE270965BD100016AC38 /* Editor.java */,
+ 33FFFE280965BD100016AC38 /* EditorButtons.java */,
+ 33FFFE290965BD110016AC38 /* EditorConsole.java */,
+ 33FFFE2A0965BD110016AC38 /* EditorHeader.java */,
+ 33FFFE2B0965BD110016AC38 /* EditorLineStatus.java */,
+ 33FFFE2C0965BD110016AC38 /* EditorListener.java */,
+ 33FFFE2D0965BD110016AC38 /* EditorStatus.java */,
+ 33FFFE2E0965BD110016AC38 /* FindReplace.java */,
+ 33FFFE2F0965BD110016AC38 /* language */,
+ 33FFFE300965BD110016AC38 /* MessageConsumer.java */,
+ 33FFFE310965BD110016AC38 /* MessageSiphon.java */,
+ 33FFFE320965BD110016AC38 /* MessageStream.java */,
+ 33FFFE330965BD110016AC38 /* Preferences.java */,
+ 33FFFE340965BD110016AC38 /* preproc */,
+ 33FFFE550965BD110016AC38 /* PresentMode.java */,
+ 33FFFE560965BD110016AC38 /* Runner.java */,
+ 33FFFE570965BD110016AC38 /* RunnerClassLoader.java */,
+ 33FFFE580965BD110016AC38 /* RunnerException.java */,
+ 33FFFE590965BD110016AC38 /* Serial.java */,
+ 33FFFE5A0965BD110016AC38 /* Sketch.java */,
+ 33FFFE5B0965BD110016AC38 /* Sketchbook.java */,
+ 33FFFE5C0965BD110016AC38 /* SketchCode.java */,
+ 33FFFE5D0965BD110016AC38 /* SketchHistory.java */,
+ 33FFFE5E0965BD110016AC38 /* SwingWorker.java */,
+ 33FFFE5F0965BD110016AC38 /* syntax */,
+ 33FFFE700965BD110016AC38 /* Target.java */,
+ 33FFFE710965BD110016AC38 /* tools */,
+ 33FFFE730965BD110016AC38 /* UpdateCheck.java */,
+ 33FFFE740965BD110016AC38 /* Uploader.java */,
+ );
+ name = app;
+ path = ../../app;
+ sourceTree = SOURCE_ROOT;
+ };
+ 33FFFE2F0965BD110016AC38 /* language */ = {
+ isa = PBXGroup;
+ children = (
+ );
+ path = language;
+ sourceTree = "";
+ };
+ 33FFFE340965BD110016AC38 /* preproc */ = {
+ isa = PBXGroup;
+ children = (
+ 33FFFE350965BD110016AC38 /* CSymbolTable.java */,
+ 33FFFE360965BD110016AC38 /* CToken.java */,
+ 33FFFE370965BD110016AC38 /* expandedWEmitter.g */,
+ 33FFFE380965BD110016AC38 /* expandedWParser.g */,
+ 33FFFE390965BD110016AC38 /* ExtendedCommonASTWithHiddenTokens.java */,
+ 33FFFE3A0965BD110016AC38 /* LineObject.java */,
+ 33FFFE3B0965BD110016AC38 /* Makefile */,
+ 33FFFE3C0965BD110016AC38 /* PdePreprocessor.java */,
+ 33FFFE3D0965BD110016AC38 /* PreprocessorInfoChannel.java */,
+ 33FFFE3E0965BD110016AC38 /* StdCLexer.java */,
+ 33FFFE3F0965BD110016AC38 /* StdCParser.g */,
+ 33FFFE400965BD110016AC38 /* StdCParser.java */,
+ 33FFFE410965BD110016AC38 /* STDCTokenTypes.java */,
+ 33FFFE420965BD110016AC38 /* STDCTokenTypes.txt */,
+ 33FFFE430965BD110016AC38 /* TNode.java */,
+ 33FFFE440965BD110016AC38 /* TNodeFactory.java */,
+ 33FFFE450965BD110016AC38 /* WEmitter.g */,
+ 33FFFE460965BD110016AC38 /* WEmitter.java */,
+ 33FFFE470965BD110016AC38 /* WEmitterTokenTypes.java */,
+ 33FFFE480965BD110016AC38 /* WEmitterTokenTypes.txt */,
+ 33FFFE490965BD110016AC38 /* whitespace_test.pde */,
+ 33FFFE4A0965BD110016AC38 /* WLexer.java */,
+ 33FFFE4B0965BD110016AC38 /* WLexerTokenTypes.java */,
+ 33FFFE4C0965BD110016AC38 /* WLexerTokenTypes.txt */,
+ 33FFFE4D0965BD110016AC38 /* WParser.g */,
+ 33FFFE4E0965BD110016AC38 /* WParser.java */,
+ 33FFFE4F0965BD110016AC38 /* WTokenTypes.java */,
+ 33FFFE500965BD110016AC38 /* WTokenTypes.txt */,
+ 33FFFE510965BD110016AC38 /* WTreeParser.g */,
+ 33FFFE520965BD110016AC38 /* WTreeParser.java */,
+ 33FFFE530965BD110016AC38 /* WTreeParserTokenTypes.java */,
+ 33FFFE540965BD110016AC38 /* WTreeParserTokenTypes.txt */,
+ );
+ path = preproc;
+ sourceTree = "";
+ };
+ 33FFFE5F0965BD110016AC38 /* syntax */ = {
+ isa = PBXGroup;
+ children = (
+ 33FFFE600965BD110016AC38 /* CTokenMarker.java */,
+ 33FFFE610965BD110016AC38 /* DefaultInputHandler.java */,
+ 33FFFE620965BD110016AC38 /* InputHandler.java */,
+ 33FFFE630965BD110016AC38 /* JEditTextArea.java */,
+ 33FFFE640965BD110016AC38 /* KeywordMap.java */,
+ 33FFFE650965BD110016AC38 /* PdeKeywords.java */,
+ 33FFFE660965BD110016AC38 /* PdeTextAreaDefaults.java */,
+ 33FFFE670965BD110016AC38 /* readme.txt */,
+ 33FFFE680965BD110016AC38 /* SyntaxDocument.java */,
+ 33FFFE690965BD110016AC38 /* SyntaxStyle.java */,
+ 33FFFE6A0965BD110016AC38 /* SyntaxUtilities.java */,
+ 33FFFE6B0965BD110016AC38 /* TextAreaDefaults.java */,
+ 33FFFE6C0965BD110016AC38 /* TextAreaPainter.java */,
+ 33FFFE6D0965BD110016AC38 /* TextUtilities.java */,
+ 33FFFE6E0965BD110016AC38 /* Token.java */,
+ 33FFFE6F0965BD110016AC38 /* TokenMarker.java */,
+ );
+ path = syntax;
+ sourceTree = "";
+ };
+ 33FFFE710965BD110016AC38 /* tools */ = {
+ isa = PBXGroup;
+ children = (
+ 33FFFE720965BD110016AC38 /* AutoFormat.java */,
+ );
+ path = tools;
+ sourceTree = "";
+ };
+ 33FFFE750965BD110016AC38 /* bootloader */ = {
+ isa = PBXGroup;
+ children = (
+ 33FFFE770965BD110016AC38 /* ATmegaBOOT.c */,
+ 33FFFE790965BD110016AC38 /* ATmegaBOOT.hex */,
+ 33FFFE7F0965BD110016AC38 /* Makefile */,
+ );
+ name = bootloader;
+ path = ../../bootloader;
+ sourceTree = SOURCE_ROOT;
+ };
+ 33FFFE800965BD110016AC38 /* build */ = {
+ isa = PBXGroup;
+ children = (
+ 33FFFE810965BD110016AC38 /* howto.txt */,
+ 33FFFE820965BD110016AC38 /* linux */,
+ 33FFFE920965BD110016AC38 /* macosx */,
+ 33FF01DA0965BD160016AC38 /* shared */,
+ 33FF028F0965BD160016AC38 /* windows */,
+ );
+ name = build;
+ path = ..;
+ sourceTree = SOURCE_ROOT;
+ };
+ 33FFFE820965BD110016AC38 /* linux */ = {
+ isa = PBXGroup;
+ children = (
+ 33FFFE830965BD110016AC38 /* .cvsignore */,
+ 33FFFE840965BD110016AC38 /* dist */,
+ 33FFFE8F0965BD110016AC38 /* dist.sh */,
+ 33FFFE900965BD110016AC38 /* make.sh */,
+ 33FFFE910965BD110016AC38 /* run.sh */,
+ );
+ path = linux;
+ sourceTree = "";
+ };
+ 33FFFE840965BD110016AC38 /* dist */ = {
+ isa = PBXGroup;
+ children = (
+ 33FFFE850965BD110016AC38 /* .cvsignore */,
+ 33FFFE860965BD110016AC38 /* arduino */,
+ 33FFFE870965BD110016AC38 /* bootloader */,
+ 33FFFE890965BD110016AC38 /* lib */,
+ );
+ path = dist;
+ sourceTree = "";
+ };
+ 33FFFE870965BD110016AC38 /* bootloader */ = {
+ isa = PBXGroup;
+ children = (
+ 33FFFE880965BD110016AC38 /* burn */,
+ );
+ path = bootloader;
+ sourceTree = "";
+ };
+ 33FFFE890965BD110016AC38 /* lib */ = {
+ isa = PBXGroup;
+ children = (
+ 33FFFE8A0965BD110016AC38 /* librxtxI2C.so */,
+ 33FFFE8B0965BD110016AC38 /* librxtxParallel.so */,
+ 33FFFE8C0965BD110016AC38 /* librxtxRaw.so */,
+ 33FFFE8D0965BD110016AC38 /* librxtxRS485.so */,
+ 33FFFE8E0965BD110016AC38 /* librxtxSerial.so */,
+ );
+ path = lib;
+ sourceTree = "";
+ };
+ 33FFFE920965BD110016AC38 /* macosx */ = {
+ isa = PBXGroup;
+ children = (
+ 33FFFE930965BD110016AC38 /* .cvsignore */,
+ 33FFFE940965BD110016AC38 /* Arduino.xcodeproj */,
+ 33FFFEAC0965BD110016AC38 /* dist */,
+ 33FFFEBD0965BD110016AC38 /* dist.sh */,
+ 33FFFEBE0965BD110016AC38 /* make.sh */,
+ 33FFFEBF0965BD110016AC38 /* mkdmg */,
+ 33FFFEC00965BD110016AC38 /* run.sh */,
+ );
+ path = macosx;
+ sourceTree = "";
+ };
+ 33FFFE950965BD110016AC38 /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ );
+ name = Products;
+ sourceTree = "";
+ };
+ 33FFFEAC0965BD110016AC38 /* dist */ = {
+ isa = PBXGroup;
+ children = (
+ 330B21530968180400345666 /* librxtxSerial.jnilib */,
+ 33FFFEAE0965BD110016AC38 /* bootloader */,
+ 33FFFEB20965BD110016AC38 /* drivers */,
+ 33FFFEB50965BD110016AC38 /* DS_Store */,
+ 33FFFEB60965BD110016AC38 /* jikes */,
+ 33FFFEB90965BD110016AC38 /* macosx_setup.command */,
+ 33FFFEBA0965BD110016AC38 /* serial */,
+ 33FFFEBC0965BD110016AC38 /* tools.zip */,
+ );
+ path = dist;
+ sourceTree = "";
+ };
+ 33FFFEAE0965BD110016AC38 /* bootloader */ = {
+ isa = PBXGroup;
+ children = (
+ 33FFFEAF0965BD110016AC38 /* burn.command */,
+ );
+ path = bootloader;
+ sourceTree = "";
+ };
+ 33FFFEB20965BD110016AC38 /* drivers */ = {
+ isa = PBXGroup;
+ children = (
+ 33FFFEB30965BD110016AC38 /* FTDIUSBSerialDriver_v2_0_1.dmg */,
+ 33FFFEB40965BD110016AC38 /* KeyspanUSAdrvr20.dmg */,
+ );
+ path = drivers;
+ sourceTree = "";
+ };
+ 33FFFEBA0965BD110016AC38 /* serial */ = {
+ isa = PBXGroup;
+ children = (
+ );
+ path = serial;
+ sourceTree = "";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXJavaArchiveBuildPhase section */
+ 33AF61660965C4C600B514A9 /* JavaArchive */ = {
+ isa = PBXJavaArchiveBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXJavaArchiveBuildPhase section */
+
+/* Begin PBXProject section */
+ 33FFFD3F0965B1E40016AC38 /* Project object */ = {
+ isa = PBXProject;
+ buildConfigurationList = 33FFFD400965B1E40016AC38 /* Build configuration list for PBXProject "Arduino" */;
+ buildSettings = {
+ };
+ buildStyles = (
+ 33AF609C0965C4B700B514A9 /* Development */,
+ 33AF609D0965C4B700B514A9 /* Deployment */,
+ );
+ hasScannedForEncodings = 0;
+ mainGroup = 33FFFD3D0965B1E40016AC38;
+ productRefGroup = 33FFFD3D0965B1E40016AC38;
+ projectDirPath = "";
+ projectReferences = (
+ {
+ ProductGroup = 33FFFE950965BD110016AC38 /* Products */;
+ ProjectRef = 33FFFE940965BD110016AC38 /* Arduino.xcodeproj */;
+ },
+ );
+ targets = (
+ 33FFFE1C0965BBEF0016AC38 /* Dist */,
+ 33AF61680965C4C600B514A9 /* App */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+ 33AF61650965C4C600B514A9 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 33CF03B209662CB700F2C9A9 /* arduino.icns in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXShellScriptBuildPhase section */
+ 33FF07170965BFFE0016AC38 /* ShellScript */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ );
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "unzip -od $BUILT_PRODUCTS_DIR/examples ../shared/dist/examples.zip\nunzip -od $BUILT_PRODUCTS_DIR dist/tools.zip";
+ };
+/* End PBXShellScriptBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 33AF61640965C4C600B514A9 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 33AF61760965C54B00B514A9 /* PreprocessorInfoChannel.java in Sources */,
+ 33AF61770965C54B00B514A9 /* EditorListener.java in Sources */,
+ 33AF61780965C54B00B514A9 /* LineObject.java in Sources */,
+ 33AF61790965C54B00B514A9 /* Serial.java in Sources */,
+ 33AF617A0965C54B00B514A9 /* TextUtilities.java in Sources */,
+ 33AF617B0965C54B00B514A9 /* EditorConsole.java in Sources */,
+ 33AF617C0965C54B00B514A9 /* TokenMarker.java in Sources */,
+ 33AF617D0965C54B00B514A9 /* MessageSiphon.java in Sources */,
+ 33AF617E0965C54B00B514A9 /* FindReplace.java in Sources */,
+ 33AF617F0965C54B00B514A9 /* SketchCode.java in Sources */,
+ 33AF61800965C54B00B514A9 /* EditorLineStatus.java in Sources */,
+ 33AF61810965C54B00B514A9 /* EditorHeader.java in Sources */,
+ 33AF61820965C54B00B514A9 /* EditorButtons.java in Sources */,
+ 33AF61830965C54B00B514A9 /* SyntaxStyle.java in Sources */,
+ 33AF61840965C54B00B514A9 /* Uploader.java in Sources */,
+ 33AF61850965C54B00B514A9 /* RunnerException.java in Sources */,
+ 33AF61860965C54B00B514A9 /* WParser.java in Sources */,
+ 33AF61870965C54B00B514A9 /* TextAreaPainter.java in Sources */,
+ 33AF61880965C54B00B514A9 /* Sketchbook.java in Sources */,
+ 33AF61890965C54B00B514A9 /* EditorStatus.java in Sources */,
+ 33AF618A0965C54B00B514A9 /* WTokenTypes.java in Sources */,
+ 33AF618B0965C54B00B514A9 /* TextAreaDefaults.java in Sources */,
+ 33AF618C0965C54B00B514A9 /* PdePreprocessor.java in Sources */,
+ 33AF618D0965C54B00B514A9 /* CSymbolTable.java in Sources */,
+ 33AF618E0965C54B00B514A9 /* SketchHistory.java in Sources */,
+ 33AF618F0965C54B00B514A9 /* RunnerClassLoader.java in Sources */,
+ 33AF61900965C54B00B514A9 /* MessageStream.java in Sources */,
+ 33AF61910965C54B00B514A9 /* SyntaxUtilities.java in Sources */,
+ 33AF61930965C54B00B514A9 /* PresentMode.java in Sources */,
+ 33AF61940965C54B00B514A9 /* STDCTokenTypes.java in Sources */,
+ 33AF61950965C54B00B514A9 /* CTokenMarker.java in Sources */,
+ 33AF61960965C54B00B514A9 /* CToken.java in Sources */,
+ 33AF61970965C54B00B514A9 /* WTreeParserTokenTypes.java in Sources */,
+ 33AF61990965C54B00B514A9 /* Runner.java in Sources */,
+ 33AF619A0965C54B00B514A9 /* TNode.java in Sources */,
+ 33AF619B0965C54B00B514A9 /* KeywordMap.java in Sources */,
+ 33AF619C0965C54B00B514A9 /* ExtendedCommonASTWithHiddenTokens.java in Sources */,
+ 33AF619D0965C54B00B514A9 /* Sketch.java in Sources */,
+ 33AF619E0965C54B00B514A9 /* WEmitterTokenTypes.java in Sources */,
+ 33AF619F0965C54B00B514A9 /* TNodeFactory.java in Sources */,
+ 33AF61A00965C54B00B514A9 /* Target.java in Sources */,
+ 33AF61A10965C54B00B514A9 /* UpdateCheck.java in Sources */,
+ 33AF61A20965C54B00B514A9 /* InputHandler.java in Sources */,
+ 33AF61A30965C54B00B514A9 /* MessageConsumer.java in Sources */,
+ 33AF61A40965C54B00B514A9 /* WLexer.java in Sources */,
+ 33AF61A50965C54B00B514A9 /* Compiler.java in Sources */,
+ 33AF61A60965C54B00B514A9 /* AutoFormat.java in Sources */,
+ 33AF61A70965C54B00B514A9 /* StdCLexer.java in Sources */,
+ 33AF61A80965C54B00B514A9 /* StdCParser.java in Sources */,
+ 33AF61A90965C54B00B514A9 /* PdeKeywords.java in Sources */,
+ 33AF61AA0965C54B00B514A9 /* Editor.java in Sources */,
+ 33AF61AB0965C54B00B514A9 /* WEmitter.java in Sources */,
+ 33AF61AC0965C54B00B514A9 /* SwingWorker.java in Sources */,
+ 33AF61AD0965C54B00B514A9 /* DefaultInputHandler.java in Sources */,
+ 33AF61AE0965C54B00B514A9 /* SyntaxDocument.java in Sources */,
+ 33AF61AF0965C54B00B514A9 /* WLexerTokenTypes.java in Sources */,
+ 33AF61B00965C54B00B514A9 /* Token.java in Sources */,
+ 33AF61B10965C54B00B514A9 /* Preferences.java in Sources */,
+ 33AF61B20965C54B00B514A9 /* PdeTextAreaDefaults.java in Sources */,
+ 33AF61B30965C54B00B514A9 /* WTreeParser.java in Sources */,
+ 33AF61B40965C54B00B514A9 /* JEditTextArea.java in Sources */,
+ 33AF61B50965C54B00B514A9 /* Base.java in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXTargetDependency section */
+ 33AF61710965C51E00B514A9 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 33FFFE1C0965BBEF0016AC38 /* Dist */;
+ targetProxy = 33AF61700965C51E00B514A9 /* PBXContainerItemProxy */;
+ };
+/* End PBXTargetDependency section */
+
+/* Begin XCBuildConfiguration section */
+ 33AF616C0965C4CB00B514A9 /* work */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ FRAMEWORK_SEARCH_PATHS = "";
+ HEADER_SEARCH_PATHS = "";
+ JAVA_CLASS_SEARCH_PATHS = "../shared/lib/registry.jar ../shared/lib/antlr.jar ../shared/lib/mrj.jar ../shared/lib/RXTXcomm.jar ../shared/lib/oro.jar";
+ JAVA_ONLY = YES;
+ JAVA_SOURCE_SUBDIR = .;
+ OPTIMIZATION_CFLAGS = "-O0";
+ OTHER_CFLAGS = "";
+ OTHER_LDFLAGS = "";
+ OTHER_REZFLAGS = "";
+ PRODUCT_NAME = Arduino;
+ SECTORDER_FLAGS = "";
+ WARNING_CFLAGS = (
+ "-Wmost",
+ "-Wno-four-char-constants",
+ "-Wno-unknown-pragmas",
+ );
+ WRAPPER_EXTENSION = app;
+ };
+ name = work;
+ };
+ 33FFFD410965B1E40016AC38 /* work */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COPY_PHASE_STRIP = NO;
+ };
+ name = work;
+ };
+ 33FFFE200965BC300016AC38 /* work */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COPY_PHASE_STRIP = NO;
+ GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
+ OPTIMIZATION_CFLAGS = "-O0";
+ OTHER_CFLAGS = "";
+ OTHER_LDFLAGS = "";
+ OTHER_REZFLAGS = "";
+ PRODUCT_NAME = Arduino;
+ SECTORDER_FLAGS = "";
+ WARNING_CFLAGS = (
+ "-Wmost",
+ "-Wno-four-char-constants",
+ "-Wno-unknown-pragmas",
+ );
+ };
+ name = work;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ 33AF616B0965C4CB00B514A9 /* Build configuration list for PBXApplicationTarget "App" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 33AF616C0965C4CB00B514A9 /* work */,
+ );
+ defaultConfigurationIsVisible = 0;
+ };
+ 33FFFD400965B1E40016AC38 /* Build configuration list for PBXProject "Arduino" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 33FFFD410965B1E40016AC38 /* work */,
+ );
+ defaultConfigurationIsVisible = 0;
+ };
+ 33FFFE1F0965BC300016AC38 /* Build configuration list for PBXAggregateTarget "Dist" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 33FFFE200965BC300016AC38 /* work */,
+ );
+ defaultConfigurationIsVisible = 0;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = 33FFFD3F0965B1E40016AC38 /* Project object */;
+}
diff --git a/build/macosx/dist/Arduino.app/Contents/Info.plist b/build/macosx/dist/Arduino.app/Contents/Info.plist
deleted file mode 100755
index 2cbb34346..000000000
--- a/build/macosx/dist/Arduino.app/Contents/Info.plist
+++ /dev/null
@@ -1,77 +0,0 @@
-
-
-
-
- CFBundleAllowMixedLocalizations
- true
- CFBundleDevelopmentRegion
- English
- CFBundleDocumentTypes
-
-
- CFBundleTypeExtensions
-
- arduino
-
- CFBundleTypeIconFile
- arduino.icns
- CFBundleTypeMIMETypes
-
- text/plain
-
- CFBundleTypeName
- Arduino Source File
- CFBundleTypeOSTypes
-
- TEXT
-
- CFBundleTypeRole
- Editor
-
-
- CFBundleExecutable
- JavaApplicationStub
- CFBundleIconFile
- arduino.icns
- CFBundleIdentifier
- de.berlios.arduino
- CFBundleInfoDictionaryVersion
- 6.0
- CFBundleName
- Arduino
- CFBundlePackageType
- APPL
- CFBundleSignature
- Pde1
- CFBundleVersion
- 0.3
- Java
-
- ClassPath
- $JAVAROOT/pde.jar:lib/core.jar:$JAVAROOT/antlr.jar:$JAVAROOT/oro.jar:$JAVAROOT/registry.jar:lib/build:$JAVAROOT/RXTXcomm.jar
- JVMVersion
- 1.4+
- MainClass
- processing.app.Base
- Properties
-
- apple.awt.Antialiasing
- true
- apple.awt.TextAntialiasing
- true
- apple.awt.showGrowBox
- true
- apple.awt.use-file-dialog-packages
- false
- apple.laf.useScreenMenuBar
- true
- com.apple.hwaccel
- true
- com.apple.smallTabs
- true
-
- VMOptions
- -Xms128M -Xmx256M
-
-
-
diff --git a/build/macosx/dist/Arduino.app/Contents/MacOS/JavaApplicationStub b/build/macosx/dist/Arduino.app/Contents/MacOS/JavaApplicationStub
deleted file mode 100755
index 162aef122..000000000
Binary files a/build/macosx/dist/Arduino.app/Contents/MacOS/JavaApplicationStub and /dev/null differ
diff --git a/build/macosx/dist/Arduino.app/Contents/PkgInfo b/build/macosx/dist/Arduino.app/Contents/PkgInfo
deleted file mode 100755
index 2a037f85c..000000000
--- a/build/macosx/dist/Arduino.app/Contents/PkgInfo
+++ /dev/null
@@ -1 +0,0 @@
-APPLsnip
\ No newline at end of file
diff --git a/build/macosx/dist/Arduino.app/Contents/Resources/Java/antlr.jar b/build/macosx/dist/Arduino.app/Contents/Resources/Java/antlr.jar
deleted file mode 100644
index 8850fc6e6..000000000
Binary files a/build/macosx/dist/Arduino.app/Contents/Resources/Java/antlr.jar and /dev/null differ
diff --git a/build/macosx/dist/Arduino.app/Contents/Resources/Java/core.jar b/build/macosx/dist/Arduino.app/Contents/Resources/Java/core.jar
deleted file mode 100644
index 9ac1641ce..000000000
Binary files a/build/macosx/dist/Arduino.app/Contents/Resources/Java/core.jar and /dev/null differ
diff --git a/build/macosx/dist/Arduino.app/Contents/Resources/Java/mrj.jar b/build/macosx/dist/Arduino.app/Contents/Resources/Java/mrj.jar
deleted file mode 100755
index 5faa8e8af..000000000
Binary files a/build/macosx/dist/Arduino.app/Contents/Resources/Java/mrj.jar and /dev/null differ
diff --git a/build/macosx/dist/Arduino.app/Contents/Resources/Java/oro.jar b/build/macosx/dist/Arduino.app/Contents/Resources/Java/oro.jar
deleted file mode 100644
index 667e86cb7..000000000
Binary files a/build/macosx/dist/Arduino.app/Contents/Resources/Java/oro.jar and /dev/null differ
diff --git a/build/macosx/dist/Arduino.app/Contents/Resources/Java/pde.jar b/build/macosx/dist/Arduino.app/Contents/Resources/Java/pde.jar
deleted file mode 100644
index bcd181bb5..000000000
Binary files a/build/macosx/dist/Arduino.app/Contents/Resources/Java/pde.jar and /dev/null differ
diff --git a/build/macosx/dist/Arduino.app/Contents/Resources/Java/registry.jar b/build/macosx/dist/Arduino.app/Contents/Resources/Java/registry.jar
deleted file mode 100644
index 2aefa0f39..000000000
Binary files a/build/macosx/dist/Arduino.app/Contents/Resources/Java/registry.jar and /dev/null differ
diff --git a/build/macosx/dist/Arduino.app/Contents/Resources/pde.icns b/build/macosx/dist/Arduino.app/Contents/Resources/pde.icns
deleted file mode 100644
index 214b19877..000000000
Binary files a/build/macosx/dist/Arduino.app/Contents/Resources/pde.icns and /dev/null differ
diff --git a/build/macosx/dist/Arduino.app/Contents/Resources/arduino.icns b/build/macosx/dist/arduino.icns
similarity index 100%
rename from build/macosx/dist/Arduino.app/Contents/Resources/arduino.icns
rename to build/macosx/dist/arduino.icns
diff --git a/build/macosx/dist/core/Makefile b/build/macosx/dist/core/Makefile
deleted file mode 100755
index acc513f3f..000000000
--- a/build/macosx/dist/core/Makefile
+++ /dev/null
@@ -1,419 +0,0 @@
-# Hey Emacs, this is a -*- makefile -*-
-#
-# WinAVR Sample makefile written by Eric B. Weddington, Jörg Wunsch, et al.
-# Released to the Public Domain
-# Please read the make user manual!
-#
-# Additional material for this makefile was submitted by:
-# Tim Henigan
-# Peter Fleury
-# Reiner Patommel
-# Sander Pool
-# Frederik Rouleau
-# Markus Pfaff
-#
-# On command line:
-#
-# make all = Make software.
-#
-# make clean = Clean out built project files.
-#
-# make coff = Convert ELF to AVR COFF (for use with AVR Studio 3.x or VMLAB).
-#
-# make extcoff = Convert ELF to AVR Extended COFF (for use with AVR Studio
-# 4.07 or greater).
-#
-# make program = Download the hex file to the device, using avrdude. Please
-# customize the avrdude settings below first!
-#
-# make filename.s = Just compile filename.c into the assembler code only
-#
-# To rebuild project do "make clean" then "make all".
-#
-
-
-# MCU name
-MCU = atmega8
-
-# Output format. (can be srec, ihex, binary)
-FORMAT = ihex
-
-# Target file name (without extension).
-TARGET = prog
-
-
-# List C source files here. (C dependencies are automatically generated.)
-#SRC = pins_arduino.c wiring.c ../avrlib/uart.c ../avrlib/buffer.c ../avrlib/timer.c ../avrlib/a2d.c $(TARGET).c
-SRC = pins_arduino.c wiring.c ../avrlib/uart.c ../avrlib/buffer.c ../avrlib/timer.c $(TARGET).c
-
-# List Assembler source files here.
-# Make them always end in a capital .S. Files ending in a lowercase .s
-# will not be considered source files but generated files (assembler
-# output from the compiler), and will be deleted upon "make clean"!
-# Even though the DOS/Win* filesystem matches both .s and .S the same,
-# it will preserve the spelling of the filenames, and gcc itself does
-# care about how the name is spelled on its command-line.
-ASRC =
-
-
-
-# Optimization level, can be [0, 1, 2, 3, s].
-# 0 = turn off optimization. s = optimize for size.
-# (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
-OPT = s
-
-
-# List any extra directories to look for include files here.
-# Each directory must be seperated by a space.
-EXTRAINCDIRS = ../avrlib
-
-
-# Compiler flag to set the C Standard level.
-# c89 - "ANSI" C
-# gnu89 - c89 plus GCC extensions
-# c99 - ISO C99 standard (not yet fully implemented)
-# gnu99 - c99 plus GCC extensions
-CSTANDARD = -std=gnu99
-
-# Place -D or -U options here
-CDEFS = -D F_CPU=16000000L
-
-# Place -I options here
-CINCS =
-
-
-# Compiler flags.
-# -g: generate debugging information
-# -O*: optimization level
-# -f...: tuning, see GCC manual and avr-libc documentation
-# -Wall...: warning level
-# -Wa,...: tell GCC to pass this to the assembler.
-# -adhlns...: create assembler listing
-CFLAGS = -g
-CFLAGS += $(CDEFS) $(CINCS)
-CFLAGS += -O$(OPT)
-CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
-CFLAGS += -Wall -Wstrict-prototypes
-CFLAGS += -Wa,-adhlns=$(<:.c=.lst)
-CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))
-CFLAGS += $(CSTANDARD)
-
-
-
-# Assembler flags.
-# -Wa,...: tell GCC to pass this to the assembler.
-# -ahlms: create listing
-# -gstabs: have the assembler create line number information; note that
-# for use in COFF files, additional information about filenames
-# and function names needs to be present in the assembler source
-# files -- see avr-libc docs [FIXME: not yet described there]
-ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs
-
-
-
-#Additional libraries.
-
-# Minimalistic printf version
-PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min
-
-# Floating point printf version (requires MATH_LIB = -lm below)
-PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt
-
-PRINTF_LIB =
-
-# Minimalistic scanf version
-SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min
-
-# Floating point + %[ scanf version (requires MATH_LIB = -lm below)
-SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt
-
-SCANF_LIB =
-
-MATH_LIB = -lm
-
-# External memory options
-
-# 64 KB of external RAM, starting after internal RAM (ATmega128!),
-# used for variables (.data/.bss) and heap (malloc()).
-#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff
-
-# 64 KB of external RAM, starting after internal RAM (ATmega128!),
-# only used for heap (malloc()).
-#EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff
-
-EXTMEMOPTS =
-
-# Linker flags.
-# -Wl,...: tell GCC to pass this to linker.
-# -Map: create map file
-# --cref: add cross reference to map file
-LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
-LDFLAGS += $(EXTMEMOPTS)
-LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)
-
-
-
-
-# Programming support using avrdude. Settings and variables.
-
-# Programming hardware: alf avr910 avrisp bascom bsd
-# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500
-#
-# Type: avrdude -c ?
-# to get a full listing.
-#
-AVRDUDE_PROGRAMMER = stk500
-
-# com1 = serial port. Use lpt1 to connect to parallel port.
-AVRDUDE_PORT = com1 # programmer connected to serial device
-
-AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex
-#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
-
-
-# Uncomment the following if you want avrdude's erase cycle counter.
-# Note that this counter needs to be initialized first using -Yn,
-# see avrdude manual.
-#AVRDUDE_ERASE_COUNTER = -y
-
-# Uncomment the following if you do /not/ wish a verification to be
-# performed after programming the device.
-#AVRDUDE_NO_VERIFY = -V
-
-# Increase verbosity level. Please use this when submitting bug
-# reports about avrdude. See
-# to submit bug reports.
-#AVRDUDE_VERBOSE = -v -v
-
-AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
-AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)
-AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)
-AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)
-
-
-
-# ---------------------------------------------------------------------------
-
-# Define directories, if needed.
-DIRAVR = ../../tools/avr
-DIRAVRBIN = $(DIRAVR)/bin
-
-# Define programs and commands.
-SHELL = sh
-CC = ${DIRAVRBIN}/avr-gcc
-OBJCOPY = ${DIRAVRBIN}/avr-objcopy
-OBJDUMP = ${DIRAVRBIN}/avr-objdump
-SIZE = ${DIRAVRBIN}/avr-size
-NM = ${DIRAVRBIN}/avr-nm
-AVRDUDE = avrdude
-REMOVE = rm -f
-COPY = cp
-
-
-
-
-# Define Messages
-# English
-MSG_ERRORS_NONE = Errors: none
-MSG_BEGIN = -------- begin --------
-MSG_END = -------- end --------
-MSG_SIZE_BEFORE = Size before:
-MSG_SIZE_AFTER = Size after:
-MSG_COFF = Converting to AVR COFF:
-MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
-MSG_FLASH = Creating load file for Flash:
-MSG_EEPROM = Creating load file for EEPROM:
-MSG_EXTENDED_LISTING = Creating Extended Listing:
-MSG_SYMBOL_TABLE = Creating Symbol Table:
-MSG_LINKING = Linking:
-MSG_COMPILING = Compiling:
-MSG_ASSEMBLING = Assembling:
-MSG_CLEANING = Cleaning project:
-
-
-
-
-# Define all object files.
-OBJ = $(SRC:.c=.o) $(ASRC:.S=.o)
-
-# Define all listing files.
-LST = $(ASRC:.S=.lst) $(SRC:.c=.lst)
-
-
-# Compiler flags to generate dependency files.
-GENDEPFLAGS = -Wp,-M,-MP,-MT,$(*F).o,-MF,dep/$(@F).d
-
-
-# Combine all necessary flags and optional flags.
-# Add target processor to flags.
-ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)
-ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
-
-
-
-
-
-# Default target.
-all: begin gccversion sizebefore build sizeafter finished end
-
-build: elf hex eep lss sym
-
-elf: $(TARGET).elf
-hex: $(TARGET).hex
-eep: $(TARGET).eep
-lss: $(TARGET).lss
-sym: $(TARGET).sym
-
-
-
-# Eye candy.
-# AVR Studio 3.x does not check make's exit code but relies on
-# the following magic strings to be generated by the compile job.
-begin:
- @echo
- @echo $(MSG_BEGIN)
-
-finished:
- @echo $(MSG_ERRORS_NONE)
-
-end:
- @echo $(MSG_END)
- @echo
-
-
-# Display size of file.
-HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
-ELFSIZE = $(SIZE) -A $(TARGET).elf
-sizebefore:
- @if [ -f $(TARGET).elf ]; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); echo; fi
-
-sizeafter:
- @if [ -f $(TARGET).elf ]; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); echo; fi
-
-
-
-# Display compiler version information.
-gccversion :
- @$(CC) --version
-
-
-
-# Program the device.
-program: $(TARGET).hex $(TARGET).eep
- $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
-
-
-
-
-# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.
-COFFCONVERT=$(OBJCOPY) --debugging \
---change-section-address .data-0x800000 \
---change-section-address .bss-0x800000 \
---change-section-address .noinit-0x800000 \
---change-section-address .eeprom-0x810000
-
-
-coff: $(TARGET).elf
- @echo
- @echo $(MSG_COFF) $(TARGET).cof
- $(COFFCONVERT) -O coff-avr $< $(TARGET).cof
-
-
-extcoff: $(TARGET).elf
- @echo
- @echo $(MSG_EXTENDED_COFF) $(TARGET).cof
- $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof
-
-
-
-# Create final output files (.hex, .eep) from ELF output file.
-%.hex: %.elf
- @echo
- @echo $(MSG_FLASH) $@
- $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@
-
-%.eep: %.elf
- @echo
- @echo $(MSG_EEPROM) $@
- -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
- --change-section-lma .eeprom=0 -O $(FORMAT) $< $@
-
-# Create extended listing file from ELF output file.
-%.lss: %.elf
- @echo
- @echo $(MSG_EXTENDED_LISTING) $@
- $(OBJDUMP) -h -S $< > $@
-
-# Create a symbol table from ELF output file.
-%.sym: %.elf
- @echo
- @echo $(MSG_SYMBOL_TABLE) $@
- $(NM) -n $< > $@
-
-
-
-# Link: create ELF output file from object files.
-.SECONDARY : $(TARGET).elf
-.PRECIOUS : $(OBJ)
-%.elf: $(OBJ)
- @echo
- @echo $(MSG_LINKING) $@
- $(CC) $(ALL_CFLAGS) $(OBJ) --output $@ $(LDFLAGS)
-
-
-# Compile: create object files from C source files.
-%.o : %.c
- @echo
- @echo $(MSG_COMPILING) $<
- $(CC) -c $(ALL_CFLAGS) $< -o $@
-
-
-# Compile: create assembler files from C source files.
-%.s : %.c
- $(CC) -S $(ALL_CFLAGS) $< -o $@
-
-
-# Assemble: create object files from assembler source files.
-%.o : %.S
- @echo
- @echo $(MSG_ASSEMBLING) $<
- $(CC) -c $(ALL_ASFLAGS) $< -o $@
-
-
-
-# Target: clean project.
-clean: begin clean_list finished end
-
-clean_list :
- @echo
- @echo $(MSG_CLEANING)
- $(REMOVE) $(TARGET).hex
- $(REMOVE) $(TARGET).eep
- $(REMOVE) $(TARGET).obj
- $(REMOVE) $(TARGET).cof
- $(REMOVE) $(TARGET).elf
- $(REMOVE) $(TARGET).map
- $(REMOVE) $(TARGET).obj
- $(REMOVE) $(TARGET).a90
- $(REMOVE) $(TARGET).sym
- $(REMOVE) $(TARGET).lnk
- $(REMOVE) $(TARGET).lss
- $(REMOVE) $(OBJ)
- $(REMOVE) $(LST)
- $(REMOVE) $(SRC:.c=.s)
- $(REMOVE) $(SRC:.c=.d)
- $(REMOVE) dep/*
-
-
-
-# Include the dependency files.
--include $(shell mkdir dep 2>/dev/null) $(wildcard dep/*)
-
-
-# Listing of phony targets.
-.PHONY : all begin finish end sizebefore sizeafter gccversion \
-build elf hex eep lss sym coff extcoff \
-clean clean_list program
-
-
-
diff --git a/build/macosx/dist/lib/Makefile b/build/macosx/dist/lib/Makefile
deleted file mode 100755
index a3d9e499c..000000000
--- a/build/macosx/dist/lib/Makefile
+++ /dev/null
@@ -1,38 +0,0 @@
-# Arduino Makefile (for Mac OS X)
-# Nick Zambetti and David A. Mellis
-# $Id: makefile.osx,v 1.6 2005/05/23 17:19:56 mellis Exp $
-
-# By default, this makefile uses the serial device specified by
-# Wiring (either in the Tools | Serial Port menu or the Wiring
-# preferences file in the sketchbook directory) and passed as
-# an argument to make. To override this value, uncomment the
-# following line and change the value to the desired device.
-# SERIAL=/dev/tty.usbserial-1B1
-
-# The Wiring Lite IDE runs the "compile" rule when you click the play button.
-compile:
- rm -rf tmp
- mkdir tmp
- cat ../core/wiringlite.inc > tmp/prog.c
- cat build/*.c >> tmp/prog.c
- cp ../core/* tmp/
- ../tools/gnumake -s -C tmp
-
-# The IDE runs the "program" rule when you hit the export button.
-# The string after the colon determines the method used to
-# program the microcontroller: program-using-bootloader or
-# program-with-isp.
-program: program-using-bootloader
-
-# This rule is for uploading code using a bootloader already on
-# the microcontroller. It should run at the baud rate specified
-# in the bootloader's code, current 9600 baud.
-program-using-bootloader:
- ../../tools/avr/bin/uisp -dprog=stk500 -dspeed=9600 -dserial=${SERIAL} -dpart=ATmega8 if=tmp/prog.hex --upload
-
-# This rule is for uploading code using an in-system programmer,
-# e.g. the one sold by Atmel. In this case, you want to erase the
-# microcontroller, upload the code, and then verify it.
-# Atmel's isp follows the stk500 protocol and works at 115200 baud.
-program-with-isp:
- ../../tools/avr/bin/uisp -dprog=stk500 -dspeed=115200 -dserial=${SERIAL} -dpart=ATmega8 if=tmp/prog.hex --erase --upload --verify
diff --git a/lib/librxtxSerial.jnilib b/build/macosx/dist/librxtxSerial.jnilib
similarity index 100%
rename from lib/librxtxSerial.jnilib
rename to build/macosx/dist/librxtxSerial.jnilib
diff --git a/build/macosx/make.sh b/build/macosx/make.sh
index 2e50a3fc1..41b5cbba6 100755
--- a/build/macosx/make.sh
+++ b/build/macosx/make.sh
@@ -25,7 +25,7 @@ else
mkdir -p work/lib/build
mkdir -p work/examples
- cp ../../lib/librxtxSerial.jnilib work/
+ cp dist/librxtxSerial.jnilib work/
cp -pR dist/drivers work/
# to have a copy of this guy around for messing with
diff --git a/build/shared/lib/buttons.gif b/build/shared/lib/buttons.gif
index 20c16dbb4..7cc33ceaf 100644
Binary files a/build/shared/lib/buttons.gif and b/build/shared/lib/buttons.gif differ
diff --git a/build/windows/dist/lib/makefile.w2k b/build/windows/dist/lib/makefile.w2k
index 248df987d..54c4f3c03 100755
--- a/build/windows/dist/lib/makefile.w2k
+++ b/build/windows/dist/lib/makefile.w2k
@@ -1,6 +1,6 @@
# Arduino Makefile (for Windows 2000)
# Nick Zambetti and David A. Mellis
-# $Id: makefile.w2k,v 1.1 2005/05/23 17:19:56 mellis Exp $
+# $Id$
# Windows 2000 seems to need backslashes in certain commands
# (e.g. bin\rm in the compile rule below) where Windows XP
diff --git a/build/windows/dist/lib/makefile.win b/build/windows/dist/lib/makefile.win
index 692efdc4e..4e087efe6 100755
--- a/build/windows/dist/lib/makefile.win
+++ b/build/windows/dist/lib/makefile.win
@@ -1,6 +1,6 @@
# Arduino Makefile (for Windows XP)
# Nick Zambetti and David A. Mellis
-# $Id: makefile.win,v 1.9 2005/05/23 18:21:46 mellis Exp $
+# $Id$
# By default, this makefile uses the serial device specified by
# Wiring (either in the Tools | Serial Port menu or the Wiring
diff --git a/lib/.cvsignore b/lib/.cvsignore
deleted file mode 100644
index a6ac11b00..000000000
--- a/lib/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-serial.jar
diff --git a/lib/rxtxSerial.dll b/lib/rxtxSerial.dll
deleted file mode 100644
index 96e4f5dec..000000000
Binary files a/lib/rxtxSerial.dll and /dev/null differ
diff --git a/readme.txt b/readme.txt
index dfdb07073..7c560d67c 100644
--- a/readme.txt
+++ b/readme.txt
@@ -4,7 +4,8 @@ language.
Arduino is an open source project, owned by nobody and supported by many.
-For more information, see the website at: http://arduino.berlios.de/
+For more information, see the website at: http://arduino.berlios.de/ or the
+forums at arduino.berlios.de/cgi-bin/yabb/YaBB.cgi
The Team is composed of Massimo Banzi, David Cuartielles, Tom Igoe,
David Mellis and Nicholas Zambetti.
@@ -15,6 +16,19 @@ taking care of the production.
Yaniv Steiner and Giorgio Olivero have been supporting the project and are
working at using it with the Instant Soup platform.
+Arduino uses the GNU avr-gcc toolchain, uisp, avr-libc, avrlib, and code
+from Processing and Wiring.
+
+UPDATES
+
+0004
+Serial monitor added (click the toolbar button to turn it on or off). Baud
+rate is controlled by the serial.debug_rate field in preferences.txt, defaults
+to 9600.
+Serial port menu now automatically refreshes when opened.
+Created Xcode project for building Arduino on the Mac (doesn't yet regenerate
+the grammar files or package the distribution); active target should be "App".
+
0003
millis() now updates every millisecond instead of every second.
Keyspan and FTDI USB drivers included with Mac and Windows distributions.
diff --git a/targets/arduino/pins_arduino.c b/targets/arduino/pins_arduino.c
index 380465696..6faf7e658 100755
--- a/targets/arduino/pins_arduino.c
+++ b/targets/arduino/pins_arduino.c
@@ -19,7 +19,7 @@
Free Software Foundation, Inc., 59 Temple Place, Suite 330,
Boston, MA 02111-1307 USA
- $Id: pins_arduino.c,v 1.4 2005/05/24 17:47:41 mellis Exp $
+ $Id$
*/
#include
diff --git a/targets/atmega8/pins_atmega8.c b/targets/atmega8/pins_atmega8.c
index d9996e68f..ed1b2bdd7 100755
--- a/targets/atmega8/pins_atmega8.c
+++ b/targets/atmega8/pins_atmega8.c
@@ -19,7 +19,7 @@
Free Software Foundation, Inc., 59 Temple Place, Suite 330,
Boston, MA 02111-1307 USA
- $Id: pins_atmega8.c,v 1.4 2005/05/24 17:47:41 mellis Exp $
+ $Id$
*/
#include
diff --git a/todo.txt b/todo.txt
index 113fa1d3a..2b233d47b 100644
--- a/todo.txt
+++ b/todo.txt
@@ -1 +1 @@
-0003 arduino
+0004 arduino