commit 3b82919d3e08358d60c6ed450dbb9ae786486316 Author: Dan Buch Date: Mon Jan 2 00:32:34 2012 -0500 Fresh start without too many jars diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..6b468b6 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +*.class diff --git a/bin/processing-commander b/bin/processing-commander new file mode 100755 index 0000000..373a5e5 --- /dev/null +++ b/bin/processing-commander @@ -0,0 +1,13 @@ +#!/bin/bash +TOP="$(dirname $(dirname $(readlink -f -- "$0")))" + +CP="$CLASSPATH" +CP="$TOP/lib/$(uname -a)/mbh-processing-practice.jar:$CP" +for procjar in "lib/core" "lib/pde" "java/lib/tools" "java/lib/rt" +do + CP="$PROCESSING_HOME/$procjar.jar:$CP" +done + +test -n "$DEBUG" && echo "DEBUG:CP=$CP" + +java -cp "$CP" com.meatballhat.processing.ProcessingRunner "$@" diff --git a/bin/prochome-check b/bin/prochome-check new file mode 100755 index 0000000..3932b0c --- /dev/null +++ b/bin/prochome-check @@ -0,0 +1,13 @@ +#!/bin/bash + +if [ -z "$PROCESSING_HOME" ]; then + cat >&2 < + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/build/.gitkeep b/build/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/lib/amd64 b/lib/amd64 new file mode 120000 index 0000000..4c36ca9 --- /dev/null +++ b/lib/amd64 @@ -0,0 +1 @@ +x86_64/ \ No newline at end of file diff --git a/lib/x86_64/mbh-processing-practice.jar b/lib/x86_64/mbh-processing-practice.jar new file mode 100644 index 0000000..efc670e Binary files /dev/null and b/lib/x86_64/mbh-processing-practice.jar differ diff --git a/sketchbook/WaveGradient/WaveGradient.pde b/sketchbook/WaveGradient/WaveGradient.pde new file mode 100644 index 0000000..67b728a --- /dev/null +++ b/sketchbook/WaveGradient/WaveGradient.pde @@ -0,0 +1,42 @@ +/** + * Wave Gradient + * by Ira Greenberg. + * + * Generate a gradient along a sin() wave. + */ + +float angle = 0; +float px = 0, py = 0; +float amplitude = 30; +float frequency = 0; +float fillGap = 2.5; +color c; + +int colorRange = 255; +int ncycles = 500; + +void setup() { + size(640, 360); + background(200); + noLoop(); +} + +void draw() { + for (int i =- ncycles; i < height+ncycles; i++){ + // Reset angle to 0, so waves stack properly + angle = 0; + // Increasing frequency causes more gaps + frequency+=.01; + for (float j = 0; j < width+ncycles; j++){ + py = i + sin(radians(angle)) * amplitude; + angle += frequency; + c = color(abs(py-i)*colorRange/amplitude, colorRange-abs(py-i)*colorRange/amplitude, j*((colorRange * 1.0)/(width+(int)(ncycles * 0.66)))); + // Hack to fill gaps. Raise value of fillGap if you increase frequency + for (int filler = 0; filler < fillGap; filler++){ + set(int(j-filler), int(py)-filler, c); + set(int(j), int(py), c); + set(int(j+filler), int(py)+filler, c); + } + } + } +} diff --git a/sketchbook/libraries/.gitkeep b/sketchbook/libraries/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/sketchbook/modes/.gitkeep b/sketchbook/modes/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/sketchbook/tools/.gitkeep b/sketchbook/tools/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/src/com/meatballhat/processing/ProcessingRunner.java b/src/com/meatballhat/processing/ProcessingRunner.java new file mode 100644 index 0000000..981afc9 --- /dev/null +++ b/src/com/meatballhat/processing/ProcessingRunner.java @@ -0,0 +1,272 @@ +package com.meatballhat.processing; + + +import java.io.File; +import java.io.IOException; +import java.io.PrintStream; + +import processing.app.Base; +import processing.app.Preferences; +import processing.app.SketchException; +import processing.app.RunnerListener; +import processing.app.Sketch; +import processing.core.PApplet; +import processing.mode.java.runner.*; + + +public class ProcessingRunner implements processing.app.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 bitsArg = "--bits="; + 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) { + // Do this early so that error messages go to the console + Base.setCommandLine(); + // 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 ProcessingRunner(args); + } + + public ProcessingRunner(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 platformBits = 0; + 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(preferencesArg)) { + preferencesPath = arg.substring(preferencesArg.length()); + + } 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 = true; // FIXME sketch.preprocess(new File(outputPath)) != null; + + } else if (mode == BUILD) { + success = true; // FIXME sketch.build(outputPath) != null; + + } else if (mode == RUN || mode == PRESENT) { + String className = "BUSTED"; // FIXME sketch.build(outputPath); + if (className != null) { + success = true; + Runner runner = new Runner(null, null); // FIXME new Runner(this, sketch); + runner.launch(true); // FIXME runner.launch(className, mode == PRESENT); + + } else { + success = false; + } + + } else if (mode == EXPORT_APPLET) { + if (outputPath != null) { + success = true; // FIXME sketch.exportApplet(outputPath); + } else { + String target = sketchFolder + File.separatorChar + "applet"; + success = true; // FIXME sketch.exportApplet(target); + } + } else if (mode == EXPORT_APPLICATION) { + if (outputPath != null) { + success = true; // FIXME sketch.exportApplication(outputPath, platformIndex, platformBits); + } else { + //String sketchFolder = + // pdePath.substring(0, pdePath.lastIndexOf(File.separatorChar)); + outputPath = + sketchFolder + File.separatorChar + + "application." + Base.getPlatformName(platformIndex); + success = true; // FIXME sketch.exportApplication(outputPath, platformIndex, platformBits); + } + } + System.exit(success ? 0 : 1); + + } catch (SketchException re) { + statusError(re); + + } catch (IOException e) { + e.printStackTrace(); + System.exit(1); + } + } + } + + public void statusNotice(String message) { + System.err.println(message); + } + + public void statusError(String message) { + System.err.println(message); + } + + public void statusError(Exception exception) { + if (exception instanceof SketchException) { + SketchException re = (SketchException) 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("--bits Must be specified if libraries are used that are"); + out.println(" 32- or 64-bit specific such as the OpenGL library."); + out.println(" Otherwise specify 0 or leave it out."); + out.println(); + out.println("--preferences= Specify a preferences file to use. Required if the"); + out.println(" sketch uses libraries found in your sketchbook folder."); + } + + public void startIndeterminate() { + } + + public void stopIndeterminate() { + } + + public void statusHalt() { + } + + public boolean isHalted() { + return false; + } +}