1
0
mirror of https://github.com/arduino/Arduino.git synced 2025-02-19 13:54:23 +01:00

svn merge -r 72:HEAD svn+ssh://mellis@svn.berlios.de/svnroot/repos/arduino/tags/0004 - used Base.java from tags/0004 but changed version back to 0003.

This commit is contained in:
David A. Mellis 2006-01-12 23:24:12 +00:00
parent 5ede9c8d2e
commit b7728ae604
49 changed files with 2425 additions and 1770 deletions

View File

@ -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.
* <P>
* 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.
* <P>
* 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.
* <P>
* 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.
* <PRE>
* e.g. String stuff[] = { "apple", "bear", "cat" };
* String list = join(stuff, ", ");
* // list is now "apple, bear, cat"</PRE>
*/
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.
* <P>
* 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).
* <PRE>
* i.e. split("a b") -> { "a", "b" }
* split("a b") -> { "a", "b" }
* split("a\tb") -> { "a", "b" }
* split("a \t b ") -> { "a", "b" }</PRE>
*/
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.
* <PRE>
* i.e. split("a, b", " ,") -> { "a", "b" }
* </PRE>
* To include all the whitespace possibilities, use the variable
* WHITESPACE, found in PConstants:
* <PRE>
* i.e. split("a | b", WHITESPACE + "|"); -> { "a", "b" }</PRE>
*/
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.
* <P>
* 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.
* <P>
* 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.
* <P>
* 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.
* <P>
* 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.
* <PRE>
* e.g. String stuff[] = { "apple", "bear", "cat" };
* String list = join(stuff, ", ");
* // list is now "apple, bear, cat"</PRE>
*/
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.
* <P>
* 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).
* <PRE>
* i.e. split("a b") -> { "a", "b" }
* split("a b") -> { "a", "b" }
* split("a\tb") -> { "a", "b" }
* split("a \t b ") -> { "a", "b" }</PRE>
*/
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.
* <PRE>
* i.e. split("a, b", " ,") -> { "a", "b" }
* </PRE>
* To include all the whitespace possibilities, use the variable
* WHITESPACE, found in PConstants:
* <PRE>
* i.e. split("a | b", WHITESPACE + "|"); -> { "a", "b" }</PRE>
*/
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.
* <P>
* 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;
}
}

View File

@ -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;

View File

@ -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 + "...");

View File

@ -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;
}

View File

@ -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,

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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.*;

View File

@ -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
{

View File

@ -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
{

View File

@ -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

View File

@ -52,7 +52,7 @@ import java.util.Vector;
* + "}");</pre>
*
* @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
{

View File

@ -20,7 +20,7 @@ import javax.swing.text.Segment;
* This class is used by <code>CTokenMarker</code> 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
{

View File

@ -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
{

View File

@ -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
{

View File

@ -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
{

View File

@ -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
{

View File

@ -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
{

View File

@ -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
{

View File

@ -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
*/

View File

@ -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$

View File

@ -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/

View File

@ -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 = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<!DOCTYPE plist PUBLIC \"-//Apple Computer//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">
<plist version=\"1.0\">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string></string>
<key>CFBundleGetInfoString</key>
<string></string>
<key>CFBundleIconFile</key>
<string>arduino.icns</string>
<key>CFBundleIdentifier</key>
<string></string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>Arduino</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string></string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>0.0.1d1</string>
<key>Java</key>
<dict>
<key>ClassPath</key>
<array>
<string>$JAVAROOT/antlr.jar</string>
<string>$JAVAROOT/Arduino.jar</string>
<string>$JAVAROOT/oro.jar</string>
<string>$JAVAROOT/mrj.jar</string>
<string>$JAVAROOT/registry.jar</string>
<string>$JAVAROOT/RXTXcomm.jar</string>
</array>
<key>JVMVersion</key>
<string>1.4+</string>
<key>MainClass</key>
<string>processing.app.Base</string>
<key>Properties</key>
<dict>
<key>apple.laf.useScreenMenuBar</key>
<string>true</string>
</dict>
</dict>
</dict>
</plist>
";
};
/* 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 = "<group>"; };
33AF620A0965D67800B514A9 /* antlr.jar */ = {isa = PBXFileReference; lastKnownFileType = archive.jar; path = antlr.jar; sourceTree = "<group>"; };
33AF620B0965D67900B514A9 /* applet.html */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.html; path = applet.html; sourceTree = "<group>"; };
33AF620C0965D67900B514A9 /* mrj.jar */ = {isa = PBXFileReference; lastKnownFileType = archive.jar; path = mrj.jar; sourceTree = "<group>"; };
33AF620D0965D67900B514A9 /* oro.jar */ = {isa = PBXFileReference; lastKnownFileType = archive.jar; path = oro.jar; sourceTree = "<group>"; };
33AF620E0965D67A00B514A9 /* registry.jar */ = {isa = PBXFileReference; lastKnownFileType = archive.jar; path = registry.jar; sourceTree = "<group>"; };
33AF620F0965D67A00B514A9 /* RXTXcomm.jar */ = {isa = PBXFileReference; lastKnownFileType = archive.jar; path = RXTXcomm.jar; sourceTree = "<group>"; };
33CF03B009662CA800F2C9A9 /* arduino.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; name = arduino.icns; path = dist/arduino.icns; sourceTree = "<group>"; };
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 = "<group>"; };
33FF01DE0965BD160016AC38 /* about.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = about.jpg; sourceTree = "<group>"; };
33FF02770965BD160016AC38 /* buttons.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = buttons.gif; sourceTree = "<group>"; };
33FF02780965BD160016AC38 /* icon.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = icon.gif; sourceTree = "<group>"; };
33FF02790965BD160016AC38 /* keywords.txt */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = keywords.txt; sourceTree = "<group>"; };
33FF027A0965BD160016AC38 /* loading.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = loading.gif; sourceTree = "<group>"; };
33FF027D0965BD160016AC38 /* preferences.txt */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = preferences.txt; sourceTree = "<group>"; };
33FF027F0965BD160016AC38 /* resize.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = resize.gif; sourceTree = "<group>"; };
33FF02810965BD160016AC38 /* tab-sel-left.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = "tab-sel-left.gif"; sourceTree = "<group>"; };
33FF02820965BD160016AC38 /* tab-sel-menu.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = "tab-sel-menu.gif"; sourceTree = "<group>"; };
33FF02830965BD160016AC38 /* tab-sel-mid.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = "tab-sel-mid.gif"; sourceTree = "<group>"; };
33FF02840965BD160016AC38 /* tab-sel-right.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = "tab-sel-right.gif"; sourceTree = "<group>"; };
33FF02850965BD160016AC38 /* tab-unsel-left.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = "tab-unsel-left.gif"; sourceTree = "<group>"; };
33FF02860965BD160016AC38 /* tab-unsel-menu.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = "tab-unsel-menu.gif"; sourceTree = "<group>"; };
33FF02870965BD160016AC38 /* tab-unsel-mid.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = "tab-unsel-mid.gif"; sourceTree = "<group>"; };
33FF02880965BD160016AC38 /* tab-unsel-right.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = "tab-unsel-right.gif"; sourceTree = "<group>"; };
33FF028B0965BD160016AC38 /* run.bat */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = run.bat; sourceTree = "<group>"; };
33FF02900965BD160016AC38 /* .cvsignore */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = .cvsignore; sourceTree = "<group>"; };
33FF02920965BD160016AC38 /* avr_tools.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = avr_tools.zip; sourceTree = "<group>"; };
33FF02940965BD160016AC38 /* burn.bat */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = burn.bat; sourceTree = "<group>"; };
33FF02960965BD160016AC38 /* makefile.w2k */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = makefile.w2k; sourceTree = "<group>"; };
33FF02970965BD160016AC38 /* makefile.win */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = makefile.win; sourceTree = "<group>"; };
33FF02990965BD160016AC38 /* FTDI USB Drivers.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = "FTDI USB Drivers.zip"; sourceTree = "<group>"; };
33FF029A0965BD160016AC38 /* KeyspanUSA19wWinV31.exe */ = {isa = PBXFileReference; lastKnownFileType = file; path = KeyspanUSA19wWinV31.exe; sourceTree = "<group>"; };
33FF029B0965BD160016AC38 /* ICE_JNIRegistry.dll */ = {isa = PBXFileReference; lastKnownFileType = file; path = ICE_JNIRegistry.dll; sourceTree = "<group>"; };
33FF029C0965BD160016AC38 /* jikes.exe */ = {isa = PBXFileReference; lastKnownFileType = file; path = jikes.exe; sourceTree = "<group>"; };
33FF029E0965BD170016AC38 /* makefile.w2k */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = makefile.w2k; sourceTree = "<group>"; };
33FF029F0965BD170016AC38 /* makefile.win */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = makefile.win; sourceTree = "<group>"; };
33FF02A00965BD170016AC38 /* run-expert.bat */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = "run-expert.bat"; sourceTree = "<group>"; };
33FF02A10965BD170016AC38 /* run.bat */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = run.bat; sourceTree = "<group>"; };
33FF02A20965BD170016AC38 /* rxtxSerial.dll */ = {isa = PBXFileReference; lastKnownFileType = file; path = rxtxSerial.dll; sourceTree = "<group>"; };
33FF02A40965BD170016AC38 /* dist.sh */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.script.sh; path = dist.sh; sourceTree = "<group>"; };
33FF02A50965BD170016AC38 /* jre.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = jre.zip; sourceTree = "<group>"; };
33FF02A70965BD170016AC38 /* .cvsignore */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = .cvsignore; sourceTree = "<group>"; };
33FF02A80965BD170016AC38 /* application.ico */ = {isa = PBXFileReference; lastKnownFileType = image.ico; path = application.ico; sourceTree = "<group>"; };
33FF02A90965BD170016AC38 /* document.ico */ = {isa = PBXFileReference; lastKnownFileType = image.ico; path = document.ico; sourceTree = "<group>"; };
33FF02AA0965BD170016AC38 /* launcher.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = launcher.cpp; sourceTree = "<group>"; };
33FF02AB0965BD170016AC38 /* launcher.rc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = launcher.rc; sourceTree = "<group>"; };
33FF02AC0965BD170016AC38 /* Makefile */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = "<group>"; };
33FF02AE0965BD170016AC38 /* make.sh */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.script.sh; path = make.sh; sourceTree = "<group>"; };
33FF02AF0965BD170016AC38 /* run.sh */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.script.sh; path = run.sh; sourceTree = "<group>"; };
33FF02B00965BD170016AC38 /* srun.sh */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.script.sh; path = srun.sh; sourceTree = "<group>"; };
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 = "<group>"; };
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 = "<group>"; };
33FFFE260965BD100016AC38 /* Compiler.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = Compiler.java; sourceTree = "<group>"; };
33FFFE270965BD100016AC38 /* Editor.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = Editor.java; sourceTree = "<group>"; };
33FFFE280965BD100016AC38 /* EditorButtons.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = EditorButtons.java; sourceTree = "<group>"; };
33FFFE290965BD110016AC38 /* EditorConsole.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = EditorConsole.java; sourceTree = "<group>"; };
33FFFE2A0965BD110016AC38 /* EditorHeader.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = EditorHeader.java; sourceTree = "<group>"; };
33FFFE2B0965BD110016AC38 /* EditorLineStatus.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = EditorLineStatus.java; sourceTree = "<group>"; };
33FFFE2C0965BD110016AC38 /* EditorListener.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = EditorListener.java; sourceTree = "<group>"; };
33FFFE2D0965BD110016AC38 /* EditorStatus.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = EditorStatus.java; sourceTree = "<group>"; };
33FFFE2E0965BD110016AC38 /* FindReplace.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = FindReplace.java; sourceTree = "<group>"; };
33FFFE300965BD110016AC38 /* MessageConsumer.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = MessageConsumer.java; sourceTree = "<group>"; };
33FFFE310965BD110016AC38 /* MessageSiphon.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = MessageSiphon.java; sourceTree = "<group>"; };
33FFFE320965BD110016AC38 /* MessageStream.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = MessageStream.java; sourceTree = "<group>"; };
33FFFE330965BD110016AC38 /* Preferences.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = Preferences.java; sourceTree = "<group>"; };
33FFFE350965BD110016AC38 /* CSymbolTable.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = CSymbolTable.java; sourceTree = "<group>"; };
33FFFE360965BD110016AC38 /* CToken.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = CToken.java; sourceTree = "<group>"; };
33FFFE370965BD110016AC38 /* expandedWEmitter.g */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = expandedWEmitter.g; sourceTree = "<group>"; };
33FFFE380965BD110016AC38 /* expandedWParser.g */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = expandedWParser.g; sourceTree = "<group>"; };
33FFFE390965BD110016AC38 /* ExtendedCommonASTWithHiddenTokens.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = ExtendedCommonASTWithHiddenTokens.java; sourceTree = "<group>"; };
33FFFE3A0965BD110016AC38 /* LineObject.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = LineObject.java; sourceTree = "<group>"; };
33FFFE3B0965BD110016AC38 /* Makefile */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = "<group>"; };
33FFFE3C0965BD110016AC38 /* PdePreprocessor.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = PdePreprocessor.java; sourceTree = "<group>"; };
33FFFE3D0965BD110016AC38 /* PreprocessorInfoChannel.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = PreprocessorInfoChannel.java; sourceTree = "<group>"; };
33FFFE3E0965BD110016AC38 /* StdCLexer.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = StdCLexer.java; sourceTree = "<group>"; };
33FFFE3F0965BD110016AC38 /* StdCParser.g */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = StdCParser.g; sourceTree = "<group>"; };
33FFFE400965BD110016AC38 /* StdCParser.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = StdCParser.java; sourceTree = "<group>"; };
33FFFE410965BD110016AC38 /* STDCTokenTypes.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = STDCTokenTypes.java; sourceTree = "<group>"; };
33FFFE420965BD110016AC38 /* STDCTokenTypes.txt */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = STDCTokenTypes.txt; sourceTree = "<group>"; };
33FFFE430965BD110016AC38 /* TNode.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = TNode.java; sourceTree = "<group>"; };
33FFFE440965BD110016AC38 /* TNodeFactory.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = TNodeFactory.java; sourceTree = "<group>"; };
33FFFE450965BD110016AC38 /* WEmitter.g */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = WEmitter.g; sourceTree = "<group>"; };
33FFFE460965BD110016AC38 /* WEmitter.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = WEmitter.java; sourceTree = "<group>"; };
33FFFE470965BD110016AC38 /* WEmitterTokenTypes.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = WEmitterTokenTypes.java; sourceTree = "<group>"; };
33FFFE480965BD110016AC38 /* WEmitterTokenTypes.txt */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = WEmitterTokenTypes.txt; sourceTree = "<group>"; };
33FFFE490965BD110016AC38 /* whitespace_test.pde */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = whitespace_test.pde; sourceTree = "<group>"; };
33FFFE4A0965BD110016AC38 /* WLexer.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = WLexer.java; sourceTree = "<group>"; };
33FFFE4B0965BD110016AC38 /* WLexerTokenTypes.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = WLexerTokenTypes.java; sourceTree = "<group>"; };
33FFFE4C0965BD110016AC38 /* WLexerTokenTypes.txt */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = WLexerTokenTypes.txt; sourceTree = "<group>"; };
33FFFE4D0965BD110016AC38 /* WParser.g */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = WParser.g; sourceTree = "<group>"; };
33FFFE4E0965BD110016AC38 /* WParser.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = WParser.java; sourceTree = "<group>"; };
33FFFE4F0965BD110016AC38 /* WTokenTypes.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = WTokenTypes.java; sourceTree = "<group>"; };
33FFFE500965BD110016AC38 /* WTokenTypes.txt */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = WTokenTypes.txt; sourceTree = "<group>"; };
33FFFE510965BD110016AC38 /* WTreeParser.g */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = WTreeParser.g; sourceTree = "<group>"; };
33FFFE520965BD110016AC38 /* WTreeParser.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = WTreeParser.java; sourceTree = "<group>"; };
33FFFE530965BD110016AC38 /* WTreeParserTokenTypes.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = WTreeParserTokenTypes.java; sourceTree = "<group>"; };
33FFFE540965BD110016AC38 /* WTreeParserTokenTypes.txt */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = WTreeParserTokenTypes.txt; sourceTree = "<group>"; };
33FFFE550965BD110016AC38 /* PresentMode.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = PresentMode.java; sourceTree = "<group>"; };
33FFFE560965BD110016AC38 /* Runner.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = Runner.java; sourceTree = "<group>"; };
33FFFE570965BD110016AC38 /* RunnerClassLoader.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = RunnerClassLoader.java; sourceTree = "<group>"; };
33FFFE580965BD110016AC38 /* RunnerException.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = RunnerException.java; sourceTree = "<group>"; };
33FFFE590965BD110016AC38 /* Serial.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = Serial.java; sourceTree = "<group>"; };
33FFFE5A0965BD110016AC38 /* Sketch.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = Sketch.java; sourceTree = "<group>"; };
33FFFE5B0965BD110016AC38 /* Sketchbook.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = Sketchbook.java; sourceTree = "<group>"; };
33FFFE5C0965BD110016AC38 /* SketchCode.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = SketchCode.java; sourceTree = "<group>"; };
33FFFE5D0965BD110016AC38 /* SketchHistory.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = SketchHistory.java; sourceTree = "<group>"; };
33FFFE5E0965BD110016AC38 /* SwingWorker.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = SwingWorker.java; sourceTree = "<group>"; };
33FFFE600965BD110016AC38 /* CTokenMarker.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = CTokenMarker.java; sourceTree = "<group>"; };
33FFFE610965BD110016AC38 /* DefaultInputHandler.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = DefaultInputHandler.java; sourceTree = "<group>"; };
33FFFE620965BD110016AC38 /* InputHandler.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = InputHandler.java; sourceTree = "<group>"; };
33FFFE630965BD110016AC38 /* JEditTextArea.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = JEditTextArea.java; sourceTree = "<group>"; };
33FFFE640965BD110016AC38 /* KeywordMap.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = KeywordMap.java; sourceTree = "<group>"; };
33FFFE650965BD110016AC38 /* PdeKeywords.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = PdeKeywords.java; sourceTree = "<group>"; };
33FFFE660965BD110016AC38 /* PdeTextAreaDefaults.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = PdeTextAreaDefaults.java; sourceTree = "<group>"; };
33FFFE670965BD110016AC38 /* readme.txt */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = readme.txt; sourceTree = "<group>"; };
33FFFE680965BD110016AC38 /* SyntaxDocument.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = SyntaxDocument.java; sourceTree = "<group>"; };
33FFFE690965BD110016AC38 /* SyntaxStyle.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = SyntaxStyle.java; sourceTree = "<group>"; };
33FFFE6A0965BD110016AC38 /* SyntaxUtilities.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = SyntaxUtilities.java; sourceTree = "<group>"; };
33FFFE6B0965BD110016AC38 /* TextAreaDefaults.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = TextAreaDefaults.java; sourceTree = "<group>"; };
33FFFE6C0965BD110016AC38 /* TextAreaPainter.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = TextAreaPainter.java; sourceTree = "<group>"; };
33FFFE6D0965BD110016AC38 /* TextUtilities.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = TextUtilities.java; sourceTree = "<group>"; };
33FFFE6E0965BD110016AC38 /* Token.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = Token.java; sourceTree = "<group>"; };
33FFFE6F0965BD110016AC38 /* TokenMarker.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = TokenMarker.java; sourceTree = "<group>"; };
33FFFE700965BD110016AC38 /* Target.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = Target.java; sourceTree = "<group>"; };
33FFFE720965BD110016AC38 /* AutoFormat.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = AutoFormat.java; sourceTree = "<group>"; };
33FFFE730965BD110016AC38 /* UpdateCheck.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = UpdateCheck.java; sourceTree = "<group>"; };
33FFFE740965BD110016AC38 /* Uploader.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = Uploader.java; sourceTree = "<group>"; };
33FFFE770965BD110016AC38 /* ATmegaBOOT.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = ATmegaBOOT.c; sourceTree = "<group>"; };
33FFFE790965BD110016AC38 /* ATmegaBOOT.hex */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = ATmegaBOOT.hex; sourceTree = "<group>"; };
33FFFE7F0965BD110016AC38 /* Makefile */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = "<group>"; };
33FFFE810965BD110016AC38 /* howto.txt */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = howto.txt; sourceTree = "<group>"; };
33FFFE830965BD110016AC38 /* .cvsignore */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = .cvsignore; sourceTree = "<group>"; };
33FFFE850965BD110016AC38 /* .cvsignore */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = .cvsignore; sourceTree = "<group>"; };
33FFFE860965BD110016AC38 /* arduino */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.script.sh; path = arduino; sourceTree = "<group>"; };
33FFFE880965BD110016AC38 /* burn */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.script.sh; path = burn; sourceTree = "<group>"; };
33FFFE8A0965BD110016AC38 /* librxtxI2C.so */ = {isa = PBXFileReference; lastKnownFileType = file; path = librxtxI2C.so; sourceTree = "<group>"; };
33FFFE8B0965BD110016AC38 /* librxtxParallel.so */ = {isa = PBXFileReference; lastKnownFileType = file; path = librxtxParallel.so; sourceTree = "<group>"; };
33FFFE8C0965BD110016AC38 /* librxtxRaw.so */ = {isa = PBXFileReference; lastKnownFileType = file; path = librxtxRaw.so; sourceTree = "<group>"; };
33FFFE8D0965BD110016AC38 /* librxtxRS485.so */ = {isa = PBXFileReference; lastKnownFileType = file; path = librxtxRS485.so; sourceTree = "<group>"; };
33FFFE8E0965BD110016AC38 /* librxtxSerial.so */ = {isa = PBXFileReference; lastKnownFileType = file; path = librxtxSerial.so; sourceTree = "<group>"; };
33FFFE8F0965BD110016AC38 /* dist.sh */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.script.sh; path = dist.sh; sourceTree = "<group>"; };
33FFFE900965BD110016AC38 /* make.sh */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.script.sh; path = make.sh; sourceTree = "<group>"; };
33FFFE910965BD110016AC38 /* run.sh */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.script.sh; path = run.sh; sourceTree = "<group>"; };
33FFFE930965BD110016AC38 /* .cvsignore */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = .cvsignore; sourceTree = "<group>"; };
33FFFE940965BD110016AC38 /* Arduino.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = Arduino.xcodeproj; sourceTree = "<group>"; };
33FFFEAF0965BD110016AC38 /* burn.command */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.script.sh; path = burn.command; sourceTree = "<group>"; };
33FFFEB30965BD110016AC38 /* FTDIUSBSerialDriver_v2_0_1.dmg */ = {isa = PBXFileReference; lastKnownFileType = file; path = FTDIUSBSerialDriver_v2_0_1.dmg; sourceTree = "<group>"; };
33FFFEB40965BD110016AC38 /* KeyspanUSAdrvr20.dmg */ = {isa = PBXFileReference; lastKnownFileType = file; path = KeyspanUSAdrvr20.dmg; sourceTree = "<group>"; };
33FFFEB50965BD110016AC38 /* DS_Store */ = {isa = PBXFileReference; lastKnownFileType = file; path = DS_Store; sourceTree = "<group>"; };
33FFFEB60965BD110016AC38 /* jikes */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.executable"; path = jikes; sourceTree = "<group>"; };
33FFFEB90965BD110016AC38 /* macosx_setup.command */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.script.sh; path = macosx_setup.command; sourceTree = "<group>"; };
33FFFEBC0965BD110016AC38 /* tools.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = tools.zip; sourceTree = "<group>"; };
33FFFEBD0965BD110016AC38 /* dist.sh */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.script.sh; path = dist.sh; sourceTree = "<group>"; };
33FFFEBE0965BD110016AC38 /* make.sh */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.script.sh; path = make.sh; sourceTree = "<group>"; };
33FFFEBF0965BD110016AC38 /* mkdmg */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.script.sh; path = mkdmg; sourceTree = "<group>"; };
33FFFEC00965BD110016AC38 /* run.sh */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.script.sh; path = run.sh; sourceTree = "<group>"; };
/* 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 = "<group>";
};
33FF01DB0965BD160016AC38 /* dist */ = {
isa = PBXGroup;
children = (
33FF01DC0965BD160016AC38 /* examples.zip */,
);
path = dist;
sourceTree = "<group>";
};
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 = "<group>";
};
33FF02890965BD160016AC38 /* reference */ = {
isa = PBXGroup;
children = (
33FF028A0965BD160016AC38 /* images */,
);
path = reference;
sourceTree = "<group>";
};
33FF028A0965BD160016AC38 /* images */ = {
isa = PBXGroup;
children = (
);
path = images;
sourceTree = "<group>";
};
33FF028C0965BD160016AC38 /* sketchbook */ = {
isa = PBXGroup;
children = (
33FF028D0965BD160016AC38 /* default */,
33FF028E0965BD160016AC38 /* examples */,
);
path = sketchbook;
sourceTree = "<group>";
};
33FF028D0965BD160016AC38 /* default */ = {
isa = PBXGroup;
children = (
);
path = default;
sourceTree = "<group>";
};
33FF028E0965BD160016AC38 /* examples */ = {
isa = PBXGroup;
children = (
);
path = examples;
sourceTree = "<group>";
};
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 = "<group>";
};
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 = "<group>";
};
33FF02930965BD160016AC38 /* bootloader */ = {
isa = PBXGroup;
children = (
33FF02940965BD160016AC38 /* burn.bat */,
);
path = bootloader;
sourceTree = "<group>";
};
33FF02950965BD160016AC38 /* core */ = {
isa = PBXGroup;
children = (
33FF02960965BD160016AC38 /* makefile.w2k */,
33FF02970965BD160016AC38 /* makefile.win */,
);
path = core;
sourceTree = "<group>";
};
33FF02980965BD160016AC38 /* drivers */ = {
isa = PBXGroup;
children = (
33FF02990965BD160016AC38 /* FTDI USB Drivers.zip */,
33FF029A0965BD160016AC38 /* KeyspanUSA19wWinV31.exe */,
);
path = drivers;
sourceTree = "<group>";
};
33FF029D0965BD160016AC38 /* lib */ = {
isa = PBXGroup;
children = (
33FF029E0965BD170016AC38 /* makefile.w2k */,
33FF029F0965BD170016AC38 /* makefile.win */,
);
path = lib;
sourceTree = "<group>";
};
33FF02A30965BD170016AC38 /* serial */ = {
isa = PBXGroup;
children = (
);
path = serial;
sourceTree = "<group>";
};
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 = "<group>";
};
33FF02AD0965BD170016AC38 /* res */ = {
isa = PBXGroup;
children = (
);
path = res;
sourceTree = "<group>";
};
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 = "<group>";
};
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 = "<group>";
};
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 = "<group>";
};
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 = "<group>";
};
33FFFE710965BD110016AC38 /* tools */ = {
isa = PBXGroup;
children = (
33FFFE720965BD110016AC38 /* AutoFormat.java */,
);
path = tools;
sourceTree = "<group>";
};
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 = "<group>";
};
33FFFE840965BD110016AC38 /* dist */ = {
isa = PBXGroup;
children = (
33FFFE850965BD110016AC38 /* .cvsignore */,
33FFFE860965BD110016AC38 /* arduino */,
33FFFE870965BD110016AC38 /* bootloader */,
33FFFE890965BD110016AC38 /* lib */,
);
path = dist;
sourceTree = "<group>";
};
33FFFE870965BD110016AC38 /* bootloader */ = {
isa = PBXGroup;
children = (
33FFFE880965BD110016AC38 /* burn */,
);
path = bootloader;
sourceTree = "<group>";
};
33FFFE890965BD110016AC38 /* lib */ = {
isa = PBXGroup;
children = (
33FFFE8A0965BD110016AC38 /* librxtxI2C.so */,
33FFFE8B0965BD110016AC38 /* librxtxParallel.so */,
33FFFE8C0965BD110016AC38 /* librxtxRaw.so */,
33FFFE8D0965BD110016AC38 /* librxtxRS485.so */,
33FFFE8E0965BD110016AC38 /* librxtxSerial.so */,
);
path = lib;
sourceTree = "<group>";
};
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 = "<group>";
};
33FFFE950965BD110016AC38 /* Products */ = {
isa = PBXGroup;
children = (
);
name = Products;
sourceTree = "<group>";
};
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 = "<group>";
};
33FFFEAE0965BD110016AC38 /* bootloader */ = {
isa = PBXGroup;
children = (
33FFFEAF0965BD110016AC38 /* burn.command */,
);
path = bootloader;
sourceTree = "<group>";
};
33FFFEB20965BD110016AC38 /* drivers */ = {
isa = PBXGroup;
children = (
33FFFEB30965BD110016AC38 /* FTDIUSBSerialDriver_v2_0_1.dmg */,
33FFFEB40965BD110016AC38 /* KeyspanUSAdrvr20.dmg */,
);
path = drivers;
sourceTree = "<group>";
};
33FFFEBA0965BD110016AC38 /* serial */ = {
isa = PBXGroup;
children = (
);
path = serial;
sourceTree = "<group>";
};
/* 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 */;
}

View File

@ -1,77 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleAllowMixedLocalizations</key>
<string>true</string>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleDocumentTypes</key>
<array>
<dict>
<key>CFBundleTypeExtensions</key>
<array>
<string>arduino</string>
</array>
<key>CFBundleTypeIconFile</key>
<string>arduino.icns</string>
<key>CFBundleTypeMIMETypes</key>
<array>
<string>text/plain</string>
</array>
<key>CFBundleTypeName</key>
<string>Arduino Source File</string>
<key>CFBundleTypeOSTypes</key>
<array>
<string>TEXT</string>
</array>
<key>CFBundleTypeRole</key>
<string>Editor</string>
</dict>
</array>
<key>CFBundleExecutable</key>
<string>JavaApplicationStub</string>
<key>CFBundleIconFile</key>
<string>arduino.icns</string>
<key>CFBundleIdentifier</key>
<string>de.berlios.arduino</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>Arduino</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleSignature</key>
<string>Pde1</string>
<key>CFBundleVersion</key>
<string>0.3</string>
<key>Java</key>
<dict>
<key>ClassPath</key>
<string>$JAVAROOT/pde.jar:lib/core.jar:$JAVAROOT/antlr.jar:$JAVAROOT/oro.jar:$JAVAROOT/registry.jar:lib/build:$JAVAROOT/RXTXcomm.jar</string>
<key>JVMVersion</key>
<string>1.4+</string>
<key>MainClass</key>
<string>processing.app.Base</string>
<key>Properties</key>
<dict>
<key>apple.awt.Antialiasing</key>
<string>true</string>
<key>apple.awt.TextAntialiasing</key>
<string>true</string>
<key>apple.awt.showGrowBox</key>
<string>true</string>
<key>apple.awt.use-file-dialog-packages</key>
<string>false</string>
<key>apple.laf.useScreenMenuBar</key>
<string>true</string>
<key>com.apple.hwaccel</key>
<string>true</string>
<key>com.apple.smallTabs</key>
<string>true</string>
</dict>
<key>VMOptions</key>
<string>-Xms128M -Xmx256M</string>
</dict>
</dict>
</plist>

View File

@ -1 +0,0 @@
APPLsnip

View File

@ -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 <http://savannah.nongnu.org/projects/avrdude>
# 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

View File

@ -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

View File

@ -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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

View File

@ -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

View File

@ -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

View File

@ -1 +0,0 @@
serial.jar

Binary file not shown.

View File

@ -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.

View File

@ -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 <avr/io.h>

View File

@ -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 <avr/io.h>

View File

@ -1 +1 @@
0003 arduino
0004 arduino