diff --git a/app/src/processing/app/Commander.java.disabled b/app/src/processing/app/Commander.java.disabled deleted file mode 100644 index 88d9cb598..000000000 --- a/app/src/processing/app/Commander.java.disabled +++ /dev/null @@ -1,297 +0,0 @@ -/* -*- mode: java; c-basic-offset: 2; indent-tabs-mode: nil -*- */ - -/* - Part of the Processing project - http://processing.org - - Copyright (c) 2008 Ben Fry and Casey Reas - - 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.io.File; -import java.io.IOException; -import java.io.PrintStream; - -import processing.core.PApplet; - -import processing.app.debug.*; - - -/** - * Class to handle running Processing from the command line. - *
- * --help               Show the help text.
- * 
- * --sketch=<name&rt;      Specify the sketch folder (required)
- * --output=<name&rt;      Specify the output folder (required and
- *                      cannot be the same as the sketch folder.)
- * 
- * --preprocess         Preprocess a sketch into .java files.
- * --build              Preprocess and compile a sketch into .class files.
- * --run                Preprocess, compile, and run a sketch.
- * --present            Preprocess, compile, and run a sketch full screen.
- * 
- * --export-applet      Export an applet.
- * --export-application Export an application.
- * --platform           Specify the platform (export to application only).
- *                      Should be one of 'windows', 'macosx', or 'linux'.
- * 
- * --preferences=<file&rt; Specify a preferences file to use (optional).
- * 
- * - * To build the command line version, first build for your platform, - * then cd to processing/build/cmd and type 'dist.sh'. This will create a - * usable installation plus a zip file of the same. - * - * @author fry - */ -public class Commander implements RunnerListener { - static final String helpArg = "--help"; - static final String preprocArg = "--preprocess"; - static final String buildArg = "--build"; - static final String runArg = "--run"; - static final String presentArg = "--present"; - static final String sketchArg = "--sketch="; - static final String outputArg = "--output="; - static final String exportAppletArg = "--export-applet"; - static final String exportApplicationArg = "--export-application"; - static final String platformArg = "--platform="; - static final String preferencesArg = "--preferences="; - - static final int HELP = -1; - static final int PREPROCESS = 0; - static final int BUILD = 1; - static final int RUN = 2; - static final int PRESENT = 3; - static final int EXPORT_APPLET = 4; - static final int EXPORT_APPLICATION = 5; - - Sketch sketch; - - - static public void main(String[] args) { - // init the platform so that prefs and other native code is ready to go - Base.initPlatform(); - // make sure a full JDK is installed - Base.initRequirements(); - // run static initialization that grabs all the prefs - //Preferences.init(null); - // launch command line handler - new Commander(args); - } - - - public Commander(String[] args) { - String sketchFolder = null; - String pdePath = null; // path to the .pde file - String outputPath = null; - String preferencesPath = null; - int platformIndex = PApplet.platform; // default to this platform - int mode = HELP; - - for (String arg : args) { - if (arg.length() == 0) { - // ignore it, just the crappy shell script - - } else if (arg.equals(helpArg)) { - // mode already set to HELP - - } else if (arg.equals(buildArg)) { - mode = BUILD; - - } else if (arg.equals(runArg)) { - mode = RUN; - - } else if (arg.equals(presentArg)) { - mode = PRESENT; - - } else if (arg.equals(preprocArg)) { - mode = PREPROCESS; - - } else if (arg.equals(exportAppletArg)) { - mode = EXPORT_APPLET; - - } else if (arg.equals(exportApplicationArg)) { - mode = EXPORT_APPLICATION; - - } else if (arg.startsWith(platformArg)) { - String platformStr = arg.substring(platformArg.length()); - platformIndex = Base.getPlatformIndex(platformStr); - if (platformIndex == -1) { - complainAndQuit(platformStr + " should instead be " + - "'windows', 'macosx', or 'linux'."); - } - } else if (arg.startsWith(sketchArg)) { - sketchFolder = arg.substring(sketchArg.length()); - File sketchy = new File(sketchFolder); - File pdeFile = new File(sketchy, sketchy.getName() + ".pde"); - pdePath = pdeFile.getAbsolutePath(); - - } else if (arg.startsWith(outputArg)) { - outputPath = arg.substring(outputArg.length()); - - } else { - complainAndQuit("I don't know anything about " + arg + "."); - } - } - - if ((outputPath == null) && - (mode == PREPROCESS || mode == BUILD || - mode == RUN || mode == PRESENT)) { - complainAndQuit("An output path must be specified when using " + - preprocArg + ", " + buildArg + ", " + - runArg + ", or " + presentArg + "."); - } - - if (mode == HELP) { - printCommandLine(System.out); - System.exit(0); - } - - // --present --platform=windows "--sketch=/Applications/Processing 0148/examples/Basics/Arrays/Array" --output=test-build - - File outputFolder = new File(outputPath); - if (!outputFolder.exists()) { - if (!outputFolder.mkdirs()) { - complainAndQuit("Could not create the output folder."); - } - } - - // run static initialization that grabs all the prefs - // (also pass in a prefs path if that was specified) - Preferences.init(preferencesPath); - - if (sketchFolder == null) { - complainAndQuit("No sketch path specified."); - - } else if (outputPath.equals(pdePath)) { - complainAndQuit("The sketch path and output path cannot be identical."); - - } else if (!pdePath.toLowerCase().endsWith(".pde")) { - complainAndQuit("Sketch path must point to the main .pde file."); - - } else { - //Sketch sketch = null; - boolean success = false; - - try { - sketch = new Sketch(null, pdePath); - if (mode == PREPROCESS) { - success = sketch.preprocess(outputPath) != null; - - } else if (mode == BUILD) { - success = sketch.build(outputPath) != null; - - } else if (mode == RUN || mode == PRESENT) { - String className = sketch.build(outputPath); - if (className != null) { - success = true; - Runner runner = - new Runner(sketch, className, mode == PRESENT, this); - runner.launch(); - - } else { - success = false; - } - - } else if (mode == EXPORT_APPLET) { - if (outputPath != null) { - success = sketch.exportApplet(outputPath); - } else { - String target = sketchFolder + File.separatorChar + "applet"; - success = sketch.exportApplet(target); - } - } else if (mode == EXPORT_APPLICATION) { - if (outputPath != null) { - success = sketch.exportApplication(outputPath, platformIndex); - } else { - //String sketchFolder = - // pdePath.substring(0, pdePath.lastIndexOf(File.separatorChar)); - outputPath = - sketchFolder + File.separatorChar + - "application." + Base.getPlatformName(platformIndex); - success = sketch.exportApplication(outputPath, platformIndex); - } - } - System.exit(success ? 0 : 1); - - } catch (RunnerException re) { - statusError(re); - - } catch (IOException e) { - e.printStackTrace(); - System.exit(1); - } - } - } - - - public void statusError(String message) { - System.err.println(message); - } - - - public void statusError(Exception exception) { - if (exception instanceof RunnerException) { - RunnerException re = (RunnerException) exception; - - // format the runner exception like emacs - //blah.java:2:10:2:13: Syntax Error: This is a big error message - String filename = sketch.getCode(re.getCodeIndex()).getFileName(); - int line = re.getCodeLine(); - int column = re.getCodeColumn(); - if (column == -1) column = 0; - // TODO if column not specified, should just select the whole line. - System.err.println(filename + ":" + - line + ":" + column + ":" + - line + ":" + column + ":" + " " + re.getMessage()); - } else { - exception.printStackTrace(); - } - } - - - static void complainAndQuit(String lastWords) { - printCommandLine(System.err); - System.err.println(lastWords); - System.exit(1); - } - - - static void printCommandLine(PrintStream out) { - out.println("Processing " + Base.VERSION_NAME + " rocks the console."); - out.println(); - out.println("--help Show this help text."); - out.println(); - out.println("--sketch= Specify the sketch folder (required)"); - out.println("--output= Specify the output folder (required and"); - out.println(" cannot be the same as the sketch folder.)"); - out.println(); - out.println("--preprocess Preprocess a sketch into .java files."); - out.println("--build Preprocess and compile a sketch into .class files."); - out.println("--run Preprocess, compile, and run a sketch."); - out.println("--present Preprocess, compile, and run a sketch full screen."); - out.println(); - out.println("--export-applet Export an applet."); - out.println("--export-application Export an application."); - out.println("--platform Specify the platform (export to application only)."); - out.println(" Should be one of 'windows', 'macosx', or 'linux'."); - out.println(); - out.println("--preferences= Specify a preferences file to use (optional)."); - } -} \ No newline at end of file diff --git a/app/src/processing/app/WebServer.java b/app/src/processing/app/WebServer.java deleted file mode 100644 index fc2089d8e..000000000 --- a/app/src/processing/app/WebServer.java +++ /dev/null @@ -1,573 +0,0 @@ -package processing.app; - -import java.io.*; -import java.net.*; -import java.util.*; -import java.util.zip.*; - -//import javax.swing.SwingUtilities; - -/** - * This code is placed here in anticipation of running the reference from an - * internal web server that reads the docs from a zip file, instead of using - * thousands of .html files on the disk, which is really inefficient. - *

- * This is a very simple, multi-threaded HTTP server, originally based on - * this article on java.sun.com. - */ -public class WebServer implements HttpConstants { - - /* Where worker threads stand idle */ - static Vector threads = new Vector(); - - /* the web server's virtual root */ - //static File root; - - /* timeout on client connections */ - static int timeout = 10000; - - /* max # worker threads */ - static int workers = 5; - -// static PrintStream log = System.out; - - - /* - static void loadProps() throws IOException { - File f = new File - (System.getProperty("java.home")+File.separator+ - "lib"+File.separator+"www-server.properties"); - if (f.exists()) { - InputStream is =new BufferedInputStream(new - FileInputStream(f)); - props.load(is); - is.close(); - String r = props.getProperty("root"); - if (r != null) { - root = new File(r); - if (!root.exists()) { - throw new Error(root + " doesn't exist as server root"); - } - } - r = props.getProperty("timeout"); - if (r != null) { - timeout = Integer.parseInt(r); - } - r = props.getProperty("workers"); - if (r != null) { - workers = Integer.parseInt(r); - } - r = props.getProperty("log"); - if (r != null) { - p("opening log file: " + r); - log = new PrintStream(new BufferedOutputStream( - new FileOutputStream(r))); - } - } - - // if no properties were specified, choose defaults - if (root == null) { - root = new File(System.getProperty("user.dir")); - } - if (timeout <= 1000) { - timeout = 5000; - } - if (workers < 25) { - workers = 5; - } - if (log == null) { - p("logging to stdout"); - log = System.out; - } - } - - static void printProps() { - p("root="+root); - p("timeout="+timeout); - p("workers="+workers); - } - */ - - - /* print to stdout */ -// protected static void p(String s) { -// System.out.println(s); -// } - - /* print to the log file */ - protected static void log(String s) { - if (false) { - System.out.println(s); - } -// synchronized (log) { -// log.println(s); -// log.flush(); -// } - } - - - //public static void main(String[] a) throws Exception { - static public int launch(String zipPath) throws IOException { - final ZipFile zip = new ZipFile(zipPath); - final HashMap entries = new HashMap(); - Enumeration en = zip.entries(); - while (en.hasMoreElements()) { - ZipEntry entry = (ZipEntry) en.nextElement(); - entries.put(entry.getName(), entry); - } - -// if (a.length > 0) { -// port = Integer.parseInt(a[0]); -// } -// loadProps(); -// printProps(); - // start worker threads - for (int i = 0; i < workers; ++i) { - WebServerWorker w = new WebServerWorker(zip, entries); - Thread t = new Thread(w, "Web Server Worker #" + i); - t.start(); - threads.addElement(w); - } - - final int port = 8080; - - //SwingUtilities.invokeLater(new Runnable() { - Runnable r = new Runnable() { - public void run() { - try { - ServerSocket ss = new ServerSocket(port); - while (true) { - Socket s = ss.accept(); - WebServerWorker w = null; - synchronized (threads) { - if (threads.isEmpty()) { - WebServerWorker ws = new WebServerWorker(zip, entries); - ws.setSocket(s); - (new Thread(ws, "additional worker")).start(); - } else { - w = (WebServerWorker) threads.elementAt(0); - threads.removeElementAt(0); - w.setSocket(s); - } - } - } - } catch (IOException e) { - e.printStackTrace(); - } - } - }; - new Thread(r).start(); -// }); - return port; - } -} - - -class WebServerWorker /*extends WebServer*/ implements HttpConstants, Runnable { - ZipFile zip; - HashMap entries; - - final static int BUF_SIZE = 2048; - - static final byte[] EOL = { (byte)'\r', (byte)'\n' }; - - /* buffer to use for requests */ - byte[] buf; - /* Socket to client we're handling */ - private Socket s; - - WebServerWorker(ZipFile zip, HashMap entries) { - this.entries = entries; - this.zip = zip; - - buf = new byte[BUF_SIZE]; - s = null; - } - -// Worker() { -// buf = new byte[BUF_SIZE]; -// s = null; -// } -// - synchronized void setSocket(Socket s) { - this.s = s; - notify(); - } - - public synchronized void run() { - while(true) { - if (s == null) { - /* nothing to do */ - try { - wait(); - } catch (InterruptedException e) { - /* should not happen */ - continue; - } - } - try { - handleClient(); - } catch (Exception e) { - e.printStackTrace(); - } - /* go back in wait queue if there's fewer - * than numHandler connections. - */ - s = null; - Vector pool = WebServer.threads; - synchronized (pool) { - if (pool.size() >= WebServer.workers) { - /* too many threads, exit this one */ - return; - } else { - pool.addElement(this); - } - } - } - } - - - void handleClient() throws IOException { - InputStream is = new BufferedInputStream(s.getInputStream()); - PrintStream ps = new PrintStream(s.getOutputStream()); - // we will only block in read for this many milliseconds - // before we fail with java.io.InterruptedIOException, - // at which point we will abandon the connection. - s.setSoTimeout(WebServer.timeout); - s.setTcpNoDelay(true); - // zero out the buffer from last time - for (int i = 0; i < BUF_SIZE; i++) { - buf[i] = 0; - } - try { - // We only support HTTP GET/HEAD, and don't support any fancy HTTP - // options, so we're only interested really in the first line. - int nread = 0, r = 0; - -outerloop: - while (nread < BUF_SIZE) { - r = is.read(buf, nread, BUF_SIZE - nread); - if (r == -1) { - return; // EOF - } - int i = nread; - nread += r; - for (; i < nread; i++) { - if (buf[i] == (byte)'\n' || buf[i] == (byte)'\r') { - break outerloop; // read one line - } - } - } - - /* are we doing a GET or just a HEAD */ - boolean doingGet; - /* beginning of file name */ - int index; - if (buf[0] == (byte)'G' && - buf[1] == (byte)'E' && - buf[2] == (byte)'T' && - buf[3] == (byte)' ') { - doingGet = true; - index = 4; - } else if (buf[0] == (byte)'H' && - buf[1] == (byte)'E' && - buf[2] == (byte)'A' && - buf[3] == (byte)'D' && - buf[4] == (byte)' ') { - doingGet = false; - index = 5; - } else { - /* we don't support this method */ - ps.print("HTTP/1.0 " + HTTP_BAD_METHOD + - " unsupported method type: "); - ps.write(buf, 0, 5); - ps.write(EOL); - ps.flush(); - s.close(); - return; - } - - int i = 0; - /* find the file name, from: - * GET /foo/bar.html HTTP/1.0 - * extract "/foo/bar.html" - */ - for (i = index; i < nread; i++) { - if (buf[i] == (byte)' ') { - break; - } - } - - String fname = new String(buf, index, i-index); - // get the zip entry, remove the front slash - ZipEntry entry = entries.get(fname.substring(1)); - //System.out.println(fname + " " + entry); - boolean ok = printHeaders(entry, ps); - if (entry != null) { - InputStream stream = zip.getInputStream(entry); - if (doingGet && ok) { - sendFile(stream, ps); - } - } else { - send404(ps); - } - /* - String fname = - (new String(buf, 0, index, i-index)).replace('/', File.separatorChar); - if (fname.startsWith(File.separator)) { - fname = fname.substring(1); - } - File targ = new File(WebServer.root, fname); - if (targ.isDirectory()) { - File ind = new File(targ, "index.html"); - if (ind.exists()) { - targ = ind; - } - } - boolean OK = printHeaders(targ, ps); - if (doingGet) { - if (OK) { - sendFile(targ, ps); - } else { - send404(targ, ps); - } - } - */ - } finally { - s.close(); - } - } - - - boolean printHeaders(ZipEntry targ, PrintStream ps) throws IOException { - boolean ret = false; - int rCode = 0; - if (targ == null) { - rCode = HTTP_NOT_FOUND; - ps.print("HTTP/1.0 " + HTTP_NOT_FOUND + " Not Found"); - ps.write(EOL); - ret = false; - } else { - rCode = HTTP_OK; - ps.print("HTTP/1.0 " + HTTP_OK + " OK"); - ps.write(EOL); - ret = true; - } - if (targ != null) { - WebServer.log("From " +s.getInetAddress().getHostAddress()+": GET " + targ.getName()+" --> "+rCode); - } - ps.print("Server: Processing Documentation Server"); - ps.write(EOL); - ps.print("Date: " + (new Date())); - ps.write(EOL); - if (ret) { - if (!targ.isDirectory()) { - ps.print("Content-length: " + targ.getSize()); - ps.write(EOL); - ps.print("Last Modified: " + new Date(targ.getTime())); - ps.write(EOL); - String name = targ.getName(); - int ind = name.lastIndexOf('.'); - String ct = null; - if (ind > 0) { - ct = (String) map.get(name.substring(ind)); - } - if (ct == null) { - //System.err.println("unknown content type " + name.substring(ind)); - ct = "application/x-unknown-content-type"; - } - ps.print("Content-type: " + ct); - ps.write(EOL); - } else { - ps.print("Content-type: text/html"); - ps.write(EOL); - } - } - ps.write(EOL); // adding another newline here [fry] - return ret; - } - - - boolean printHeaders(File targ, PrintStream ps) throws IOException { - boolean ret = false; - int rCode = 0; - if (!targ.exists()) { - rCode = HTTP_NOT_FOUND; - ps.print("HTTP/1.0 " + HTTP_NOT_FOUND + " Not Found"); - ps.write(EOL); - ret = false; - } else { - rCode = HTTP_OK; - ps.print("HTTP/1.0 " + HTTP_OK+" OK"); - ps.write(EOL); - ret = true; - } - WebServer.log("From " +s.getInetAddress().getHostAddress()+": GET " + targ.getAbsolutePath()+"-->"+rCode); - ps.print("Server: Simple java"); - ps.write(EOL); - ps.print("Date: " + (new Date())); - ps.write(EOL); - if (ret) { - if (!targ.isDirectory()) { - ps.print("Content-length: " + targ.length()); - ps.write(EOL); - ps.print("Last Modified: " + new Date(targ.lastModified())); - ps.write(EOL); - String name = targ.getName(); - int ind = name.lastIndexOf('.'); - String ct = null; - if (ind > 0) { - ct = (String) map.get(name.substring(ind)); - } - if (ct == null) { - ct = "unknown/unknown"; - } - ps.print("Content-type: " + ct); - ps.write(EOL); - } else { - ps.print("Content-type: text/html"); - ps.write(EOL); - } - } - return ret; - } - - - void send404(PrintStream ps) throws IOException { - ps.write(EOL); - ps.write(EOL); - ps.print("

404 Not Found

"+ - "The requested resource was not found."); - ps.write(EOL); - ps.write(EOL); - } - - - void sendFile(File targ, PrintStream ps) throws IOException { - InputStream is = null; - ps.write(EOL); - if (targ.isDirectory()) { - listDirectory(targ, ps); - return; - } else { - is = new FileInputStream(targ.getAbsolutePath()); - } - sendFile(is, ps); - } - - - void sendFile(InputStream is, PrintStream ps) throws IOException { - try { - int n; - while ((n = is.read(buf)) > 0) { - ps.write(buf, 0, n); - } - } finally { - is.close(); - } - } - - /* mapping of file extensions to content-types */ - static java.util.Hashtable map = new java.util.Hashtable(); - - static { - fillMap(); - } - static void setSuffix(String k, String v) { - map.put(k, v); - } - - static void fillMap() { - setSuffix("", "content/unknown"); - - setSuffix(".uu", "application/octet-stream"); - setSuffix(".exe", "application/octet-stream"); - setSuffix(".ps", "application/postscript"); - setSuffix(".zip", "application/zip"); - setSuffix(".sh", "application/x-shar"); - setSuffix(".tar", "application/x-tar"); - setSuffix(".snd", "audio/basic"); - setSuffix(".au", "audio/basic"); - setSuffix(".wav", "audio/x-wav"); - - setSuffix(".gif", "image/gif"); - setSuffix(".jpg", "image/jpeg"); - setSuffix(".jpeg", "image/jpeg"); - - setSuffix(".htm", "text/html"); - setSuffix(".html", "text/html"); - setSuffix(".css", "text/css"); - setSuffix(".java", "text/javascript"); - - setSuffix(".txt", "text/plain"); - setSuffix(".java", "text/plain"); - - setSuffix(".c", "text/plain"); - setSuffix(".cc", "text/plain"); - setSuffix(".c++", "text/plain"); - setSuffix(".h", "text/plain"); - setSuffix(".pl", "text/plain"); - } - - void listDirectory(File dir, PrintStream ps) throws IOException { - ps.println("Directory listing

\n"); - ps.println("Parent Directory
\n"); - String[] list = dir.list(); - for (int i = 0; list != null && i < list.length; i++) { - File f = new File(dir, list[i]); - if (f.isDirectory()) { - ps.println(""+list[i]+"/
"); - } else { - ps.println(""+list[i]+"



" + (new Date()) + ""); - } - -} - - -interface HttpConstants { - /** 2XX: generally "OK" */ - public static final int HTTP_OK = 200; - public static final int HTTP_CREATED = 201; - public static final int HTTP_ACCEPTED = 202; - public static final int HTTP_NOT_AUTHORITATIVE = 203; - public static final int HTTP_NO_CONTENT = 204; - public static final int HTTP_RESET = 205; - public static final int HTTP_PARTIAL = 206; - - /** 3XX: relocation/redirect */ - public static final int HTTP_MULT_CHOICE = 300; - public static final int HTTP_MOVED_PERM = 301; - public static final int HTTP_MOVED_TEMP = 302; - public static final int HTTP_SEE_OTHER = 303; - public static final int HTTP_NOT_MODIFIED = 304; - public static final int HTTP_USE_PROXY = 305; - - /** 4XX: client error */ - public static final int HTTP_BAD_REQUEST = 400; - public static final int HTTP_UNAUTHORIZED = 401; - public static final int HTTP_PAYMENT_REQUIRED = 402; - public static final int HTTP_FORBIDDEN = 403; - public static final int HTTP_NOT_FOUND = 404; - public static final int HTTP_BAD_METHOD = 405; - public static final int HTTP_NOT_ACCEPTABLE = 406; - public static final int HTTP_PROXY_AUTH = 407; - public static final int HTTP_CLIENT_TIMEOUT = 408; - public static final int HTTP_CONFLICT = 409; - public static final int HTTP_GONE = 410; - public static final int HTTP_LENGTH_REQUIRED = 411; - public static final int HTTP_PRECON_FAILED = 412; - public static final int HTTP_ENTITY_TOO_LARGE = 413; - public static final int HTTP_REQ_TOO_LONG = 414; - public static final int HTTP_UNSUPPORTED_TYPE = 415; - - /** 5XX: server error */ - public static final int HTTP_SERVER_ERROR = 500; - public static final int HTTP_INTERNAL_ERROR = 501; - public static final int HTTP_BAD_GATEWAY = 502; - public static final int HTTP_UNAVAILABLE = 503; - public static final int HTTP_GATEWAY_TIMEOUT = 504; - public static final int HTTP_VERSION = 505; -}