[PD-cvs] SF.net SVN: pure-data: [9622] vendor/pdj/current

eighthave at users.sourceforge.net eighthave at users.sourceforge.net
Sat Mar 22 03:23:51 CET 2008


Revision: 9622
          http://pure-data.svn.sourceforge.net/pure-data/?rev=9622&view=rev
Author:   eighthave
Date:     2008-03-21 19:23:51 -0700 (Fri, 21 Mar 2008)

Log Message:
-----------
merging in pdj-0.8.4.tar.gz from http://www.le-son666.com/software/pdj/

Modified Paths:
--------------
    vendor/pdj/current/LICENSE
    vendor/pdj/current/Linux-build.properties
    vendor/pdj/current/Mac OS X-build.properties
    vendor/pdj/current/README
    vendor/pdj/current/Windows XP-build.properties
    vendor/pdj/current/build.properties
    vendor/pdj/current/build.xml
    vendor/pdj/current/lib/ant/cpptasks.jar
    vendor/pdj/current/res/pdj.properties
    vendor/pdj/current/src/MaxClock.c
    vendor/pdj/current/src/MaxObject.c
    vendor/pdj/current/src/MaxSystem.c
    vendor/pdj/current/src/init.c
    vendor/pdj/current/src/java/com/cycling74/max/MaxObject.java
    vendor/pdj/current/src/java/com/cycling74/max/MaxRuntimeException.java
    vendor/pdj/current/src/java/com/cycling74/max/MaxSystem.java
    vendor/pdj/current/src/java/com/cycling74/msp/AudioFileBuffer.java
    vendor/pdj/current/src/java/com/e1/pdj/JikesCompiler.java
    vendor/pdj/current/src/java/com/e1/pdj/PDJSystem.java
    vendor/pdj/current/src/java/pdj_test_class.java
    vendor/pdj/current/src/pdj-linux.c
    vendor/pdj/current/src/pdj-osx.c
    vendor/pdj/current/src/pdj.h
    vendor/pdj/current/src/pdj~.c
    vendor/pdj/current/src/type_handler.c
    vendor/pdj/current/www/index.html

Added Paths:
-----------
    vendor/pdj/current/res/docs/
    vendor/pdj/current/res/docs/pdj.odt
    vendor/pdj/current/res/docs/pdj.pdf
    vendor/pdj/current/src/java/com/cycling74/net/
    vendor/pdj/current/src/java/com/cycling74/net/TcpReceiver.java
    vendor/pdj/current/src/java/com/cycling74/net/TcpSender.java
    vendor/pdj/current/src/java/com/cycling74/net/UdpReceiver.java
    vendor/pdj/current/src/java/com/cycling74/net/UdpSender.java
    vendor/pdj/current/src/pd_patch/
    vendor/pdj/current/src/pd_patch/osx_extsched_fix.patch

Modified: vendor/pdj/current/LICENSE
===================================================================
--- vendor/pdj/current/LICENSE	2008-03-22 02:15:12 UTC (rev 9621)
+++ vendor/pdj/current/LICENSE	2008-03-22 02:23:51 UTC (rev 9622)
@@ -1,4 +1,4 @@
-Copyright (c) 2004-2007, Pascal Gauthier
+Copyright (c) 2004-2008, Pascal Gauthier
 All rights reserved.
 
 Redistribution and use in source and binary forms, with or without

Modified: vendor/pdj/current/Linux-build.properties
===================================================================
--- vendor/pdj/current/Linux-build.properties	2008-03-22 02:15:12 UTC (rev 9621)
+++ vendor/pdj/current/Linux-build.properties	2008-03-22 02:23:51 UTC (rev 9622)
@@ -1,15 +1,19 @@
-# property file for Linux
+# property file for Linux, now with default ubuntu packages
 
 # put the path of where the jdk (java sdk) is installed
-jdk.home=/usr/local/java
+jdk.home=/usr/lib/jvm/java-6-sun
 
 # put the path of where pd is installed
-pd.home=/home/asb2m10/pd-0.39-0
+pd.home=/usr
 
 # common linux properties
 isLinux=true
 compiler=gcc
 linker.type=shared
 platform=linux
+
+# 64-bits system ? uncomment this
+#jdk.libs=${jdk.home}/jre/lib/amd64
+
 jdk.libs=${jdk.home}/jre/lib/i386
-pdj.outfile=${dist.dir}/pdj
\ No newline at end of file
+pdj.outfile=${dist.dir}/pdj

Modified: vendor/pdj/current/Mac OS X-build.properties
===================================================================
--- vendor/pdj/current/Mac OS X-build.properties	2008-03-22 02:15:12 UTC (rev 9621)
+++ vendor/pdj/current/Mac OS X-build.properties	2008-03-22 02:23:51 UTC (rev 9622)
@@ -3,7 +3,7 @@
 # put the root of your pd path installation
 pd.home=/Applications/pd.app/Contents/Resources
 
-# set this to 'pd_darwin' if you are building for PowerPC
+# now building fat binaries
 pdj.archBuild=d_fat
 
 # common OS X properties

Modified: vendor/pdj/current/README
===================================================================
--- vendor/pdj/current/README	2008-03-22 02:15:12 UTC (rev 9621)
+++ vendor/pdj/current/README	2008-03-22 02:23:51 UTC (rev 9622)
@@ -2,9 +2,8 @@
 pdj - java plugin interface to pure-data
 ###########################################################################
 
-RELEASE 0.8.3 / September 2007
+RELEASE 0.8.4 / March 2008
 
-
 PDJ enables you to write java code to interact with pure-data objects. The
 API is totally based on Cycling74 Max/MSP 'mxj' object implementation. This 
 will enable java mxj objects to run on pure-data with pdj. You can also 
@@ -22,15 +21,10 @@
 	* Atom 98%
 	* MaxSystem 90%
 	* MaxQelem 90%
-	* MSPObject 85% (missing signal in/outlet detection)
+	* MSPObject 90% (missing signal in/outlet detection)
 	* MSPPerformable 100%
 	* MaxPatcher 5%
 
-TODO:
-
-	* MSPObject connection status
-	* MaxBox/MaxPatcher object; inspiration from dyn~ (kudo Mr. Grill!)
-
 LIMITATION:
 
 	* Signal inlets cannot be hot inlets for receiving atom message.
@@ -38,13 +32,6 @@
 	  to this inlet, pdj won't be able to process it; float or symbol.
 	  This looks like a work as designed in pd.
 
-BUGS:
-
-	* OS X: cannot use AWT classes with OS X because of a weird bug
-	  that locks the thread when the GUI libraries are loaded. 
-	  -> http://lists.apple.com/archives/java-dev/2004/Mar/msg00910.html
-	  this solution has been tested but the loadLibrary still hang.
-
 WORKAROUNDS: 
 
 	* on most cases you don't have to put the JVM libs dir to the 
@@ -53,34 +40,32 @@
 	* on some machines, the System.out redirection can crash PD. If
 	  it is the case, you can disable it in the pdj.properties file;
 	  check the property: pdj.redirect-pdio.
+	* You must use pdj pd scheduler if you need to use AWT with OS X. 
+	  See below.
 
 REQUIEREMENTS:
 	
-	* pure-data 0.38.x or better
+	* pure-data 0.41.x
 	* java JDK version 1.4.x or better; use 1.5 if you can !
-	* works on linux, windows
+	* works on linux, windows and OS X (10.3.9)
 	
 REQUIEREMENTS FOR BUILDING:
 
 	* apache ant 1.6.x or better
+	* comes with it's own version of cpptask that has been patched for 
+	  linking with GCC/OS X with the -arch argument.
 	* c compiler
 
 INSTALLATION:
 
 	* if you are using the source distribution, build it before
 	  -> download java sdk from java.sun.com (unless you are using OS X)
-	  -> download apache ant for ant.apache.org
 	  -> edit file <your platform>-build.properties
 	  -> in the root directory of pdj, run 'ant package'
-	* add the pdj external (pdj.pd_linux/pd.dll/pd.pd_dawrin) directory
-	  to your pd path (very important on OS X)
 	* the other files of the original binary directory must be in 
 	  the same directory
 	* double check dist/pdj.properties to be sure that the JAVA 
 	  environment parameters are right
-	* === OS X WARNING ====
-	  I am working on a universal binary of pdj. This is planned on version
-	  0.8.4. If you really need a OS X build, email me.
 
 USAGE:
 
@@ -88,18 +73,57 @@
 	* create a pdj object with the name of the java class; if
 	  you have not compiled it before, pdj will do it for you
 
+USING AWT WITH OS X:
+
+	Unlike Linux or Windows, you cannot just simply fire-up a AWT form on OS X. 
+	This is because the event GUI mecanism has these limitation :
+ 	
+	--> A CFRunLoopRun must be park in the main thread before the main loop is 
+	    started
+	--> Java must be run in a secondary thread.
+ 
+	Since this prerequisite need a pure-data patch, we will write our own pd 
+	scheduler. This scheduler will simple fire-up another thread that will 
+	run the real pd scheduler (m_mainloop) and park the main thread with a 
+	CFRunLoopRun.
+
+	To be able to use the pdj scheduler, you need to apply a patch to pd. (Yes
+	there is a bug with the -schedlib option). The patch is available in the 
+	directory src/pd_patch/osx_extsched_fix.patch. This patch has been made on 
+	a miller's 41.2 pd version.
+
+	Once the patch is applied and compiled, you must configure your pure-data 
+	environement to add the option : -schedlib [fullpath of the pdj external 
+	without the extension]. Use the menu Pd -> Preference -> Startup to do this.
+	Don't forget to click on [Save All Settings].
+
+	Be carfull when you configure this switch since it can crash PD on startup. 
+	If you do have the problem; you will have to delete all pd-preferences by 
+	deleting file: ~/Library/Preferences/org.puredata.pd.plist
+	
+	If the scheduler is loaded, you should have this pd message :
+		'pdj: using pdj scheduler for Java AWT'
+
 CHANGELOG:
+
+	--- VERSION 0.8.4 ---
+	* amd64 for Linux (thanks to Sergio Torres-Perez)
+	* getInlets() starts at 0 not 1 (thanks to MiS)
+	* OS X gets pdj path by it's library path
+	* OS X powerpc/intel distribution
+	* added a user guide
+	* FIXED: AWT usage on OS X
+
 	--- VERSION 0.8.3 ---
 	* Atom.getInt() on a float now works.
 	* corrected some classpath definition issues with windows
 	* bypass the java compilation with pdj.compiler=null
 	* remove dependencies task for cpptasks.jar (now part of distribution)
 	* FIXED: comment on property pdj.vm_args failed to initialize VM
-	* BUG: cannot link with OS X and cpptasks. Planned on 0.8.4
 
 	--- VERSION 0.8.2 ---
 	* if javac is set, using the javac compiler from the JAVA_HOME first
-	* optimizations (main thread JVM and symbol method resolution)
+	* optimization (main thread JVM and symbol method resolution)
 	* FIXED: using pdj.classpath with directories
 	* FIXED: search path on file in the current directory
 	* FIXED: leak with open_path and casting warnings
@@ -144,7 +168,7 @@
 
 	--- VERSION 0.5 ---
 	* method inlet resolution (bang->float->list->anything) now works
-	* windows support (premilinary support)
+	* windows support (preliminary support)
 	* auto-compiling class of every .java in /class (max -1; pdj +1)
 
 	--- VERSION 0.4 ---
@@ -166,9 +190,11 @@
 
 THANKS:
 
+	* Sergio Torres-Perez
 	* Thomas Grill
+	* Michal Seta
 	* patrick a 11h11
 	* pd-mtl crew !
 
-(c) Pascal Gauthier 2004-2007, under BSD like license
+(c) Pascal Gauthier 2004-2008, under BSD like license
 asb2m10 at users.sourceforge.net

Modified: vendor/pdj/current/Windows XP-build.properties
===================================================================
--- vendor/pdj/current/Windows XP-build.properties	2008-03-22 02:15:12 UTC (rev 9621)
+++ vendor/pdj/current/Windows XP-build.properties	2008-03-22 02:23:51 UTC (rev 9622)
@@ -5,6 +5,7 @@
 
 # put the path of where pd is installed
 pd.home=C:/Projets/pd
+
 # common windows properties
 isWin32=true
 compiler=msvc

Modified: vendor/pdj/current/build.properties
===================================================================
--- vendor/pdj/current/build.properties	2008-03-22 02:15:12 UTC (rev 9621)
+++ vendor/pdj/current/build.properties	2008-03-22 02:23:51 UTC (rev 9622)
@@ -2,7 +2,7 @@
 
 # PDJ packaging version
 # =========================================================================
-pdj.version=0.8.3
+pdj.version=0.8.4
 
 # Various path definition
 # =========================================================================

Modified: vendor/pdj/current/build.xml
===================================================================
--- vendor/pdj/current/build.xml	2008-03-22 02:15:12 UTC (rev 9621)
+++ vendor/pdj/current/build.xml	2008-03-22 02:23:51 UTC (rev 9622)
@@ -1,28 +1,27 @@
-<project name="pdj" default="package" basedir=".">
+<?xml version="1.0"?>
 
+<project name="pdj" default="package" basedir=".">
 	<property file="build.properties"/>
 	<property file="${os.name}-build.properties"/>
 	
 	<!-- ============================================================== -->
-
 	<property name="jdk.include" value="${jdk.home}/include"/>
 	<property name="pd.include" value="${pd.home}/src"/>
-
+	
 	<!-- java classes that uses a native interface -->
 	<property name="native.classes" value="
-		com.cycling74.max.MaxObject,
-		com.cycling74.max.MaxClock,
-	 	com.cycling74.max.MaxSystem,
-		com.cycling74.msp.MSPBuffer,
-		com.cycling74.msp.MSPObject"/>
-
+			com.cycling74.max.MaxObject,   
+			com.cycling74.max.MaxClock,    
+			com.cycling74.max.MaxSystem,   
+			com.cycling74.msp.MSPBuffer,  
+			com.cycling74.msp.MSPObject"/>
+			
 	<target name="clean" depends="-init">
 		<delete dir="${dist.dir}"/>
 		<delete dir="${work.dir}"/>
 		<delete dir="${javadoc.dir}"/>
 		<delete>
-			<fileset dir="." 
-				includes="**/history.xml,**/dependencies.xml,index.html"/>
+			<fileset dir="." includes="**/history.xml,**/dependencies.xml,index.html"/>
 		</delete>
 	</target>
 	
@@ -35,110 +34,106 @@
 	</target>
 	
 	<target name="cl-java" depends="-init">
-		<javac destdir="${classes.dir}" srcdir="${java.src.dir}" debug="true"
+		<javac destdir="${classes.dir}" srcdir="${java.src.dir}" debug="true" 
 			target="1.4" source="1.4">
 			<exclude name="**/test/**" unless="isJunitFound"/>
 			<exclude name="**/*Test.java" unless="isJunitFound"/>
-		</javac>		
+		</javac>
+		
 		<jar jarfile="${pdj.jar}" basedir="${classes.dir}">
 			<exclude name="*.class"/>
 			<exclude name="**/test/**" unless="isJunitFound"/>
 			<exclude name="**/*Test.class" unless="isJunitFound"/>
 		</jar>
-
-		<uptodate property="javah.up2date"
-			srcfile="${pdj.jar}" targetfile="${javah.file}"/>
+		
+		<uptodate property="javah.up2date" srcfile="${pdj.jar}" targetfile="${javah.file}"/>
 	</target>
 	
 	<target name="javah" depends="cl-java" unless="javah.up2date">
-		<javah class="${native.classes}" classpath="${pdj.jar}"
-			outputFile="${javah.file}" force="true"/>
+		<javah class="${native.classes}" classpath="${pdj.jar}" outputFile="${javah.file}" force="true"/>
 	</target>
 	
 	<target name="-linux-rename" if="isLinux">
 		<move file="${dist.dir}/libpdj.so" tofile="${dist.dir}/pdj.pd_linux"/>
 	</target>
 	
-    <target name="-osx-rename" if="isOSX">
+	<target name="-osx-rename" if="isOSX">
 		<move file="${dist.dir}/libpdj.${pdj.archBuild}.bundle" tofile="${pdj.outfile}"/>
-    </target>
-    
+	</target>
+	
 	<target name="cl" depends="javah">
 		<cc debug="true" objdir="${work.dir}" outtype="${linker.type}" 
-            outfile="${pdj.outfile}" name="${compiler}">
+			outfile="${pdj.outfile}" name="${compiler}">
 			
 			<fileset dir="${src.dir}" includes="*.c">
 				<exclude name="pdj-linux.c" unless="isLinux"/>
 				<exclude name="pdj-win32.c" unless="isWin32"/>
-				<exclude name="pdj-osx.c"   unless="isOSX"/>
+				<exclude name="pdj-osx.c" unless="isOSX"/>
 			</fileset>
-		  
+			
 			<!-- compiler args -->
 			<defineset define="DEBUG"/>
 			<defineset define="PROFILER"/>
 			<defineset define="PD"/>
 			<defineset define="NT" if="isWin32"/>
-			
 			<compilerarg value="-Wall" if="isLinux"/>
-            <compilerarg value="-fno-common" if="isOSX"/>
-            <compilerarg value="-fPIC" if="isOSX"/>
-	    	<compilerarg value="-arch" if="isOSX"/>
-	   		<compilerarg value="i386" if="isOSX"/>
-            <compilerarg value="-arch" if="isOSX"/>
-	   		<compilerarg value="ppc" if="isOSX"/>
-            
+		
+			<compilerarg value="-fno-common" if="isOSX"/>
+			<compilerarg value="-fPIC" if="isOSX"/>
+			<compilerarg value="-arch" if="isOSX"/>
+			<compilerarg value="i386" if="isOSX"/>
+			<compilerarg value="-arch" if="isOSX"/>
+			<compilerarg value="ppc" if="isOSX"/>
+			
 			<!-- includes files -->
 			<includepath location="${jdk.include}"/>
 			<includepath location="${jdk.include}/linux" if="isLinux"/>
 			<includepath location="${jdk.include}/win32" if="isWin32"/>
 			<includepath location="${pd.include}"/>
 			<includepath location="${work.dir}"/>
-            
-            <!-- linker specific -->
-            <libset dir="${pd.home}/bin" libs="pd" if="isWin32"/>
-            <libset if="isWin32" libs="Advapi32"/>
-            <linkerarg value="/export:pdj_setup" if="isWin32"/>
-
+			
+			<!-- linker specific -->
+			<libset dir="${pd.home}/bin" libs="pd" if="isWin32"/>
+			<libset libs="Advapi32" if="isWin32"/>
+			<linkerarg value="/export:pdj_setup" if="isWin32"/>
+			
 			<linkerarg value="-export-dynamic" if="isLinux"/>
 			<linkerarg value="-Xlinker" if="isLinux"/>
 			
 			<!-- OS X :-\ -->
+			<linker name="gcc" if="isOSX"/>
 			<linkerarg value="-arch" if="isOSX"/>
+			<linkerarg value="i386" if="isOSX"/>
 			<linkerarg value="-arch" if="isOSX"/>
-	        <linkerarg value="i386" if="isOSX"/>
-			<linkerarg value="-arch" if="isOSX"/>
-	        <linkerarg value="ppc" if="isOSX"/>
-
-            <linkerarg value="-framework" if="isOSX"/>
-            <linkerarg value="JavaVM" if="isOSX"/>
-            <linkerarg value="-framework" if="isOSX"/>
-            <linkerarg value="CoreFoundation" if="isOSX"/>
-            <linkerarg value="-flat_namespace" if="isOSX"/>
-            <linkerarg value="-framework" if="isOSX"/>
-            <linkerarg value="AppKit" if="isOSX"/>
-            <linkerarg value="-undefined" if="isOSX"/>
-            <linkerarg value="suppress" if="isOSX"/>
-
-            <linkerarg value="-bundle" if="isOSX"/>
-            <linkerarg value="-Xlinker" if="isOSX"/>
-           
-        </cc>
-       
+			<linkerarg value="ppc" if="isOSX"/>
+			<linkerarg value="-framework" if="isOSX"/>
+			<linkerarg value="JavaVM" if="isOSX"/>
+			<linkerarg value="-framework" if="isOSX"/>
+			<linkerarg value="CoreFoundation" if="isOSX"/>
+			<linkerarg value="-flat_namespace" if="isOSX"/>
+			<linkerarg value="-framework" if="isOSX"/>
+			<linkerarg value="AppKit" if="isOSX"/>
+			<linkerarg value="-undefined" if="isOSX"/>
+			<linkerarg value="suppress" if="isOSX"/>
+			<linkerarg value="-lm" if="isOSX"/>
+			<linkerarg value="-bundle" if="isOSX"/>
+		</cc>
+		
 		<antcall target="-linux-rename"/>
-        <antcall target="-osx-rename"/>
+		<antcall target="-osx-rename"/>
 	</target>
 	
 	<target name="package" depends="cl">
 		<copy todir="${dist.dir}">
-			<fileset dir="res"/>
+			<fileset dir="res">
+				<exclude name="docs/pdj.odt"/>
+			</fileset>
 		</copy>
-			
 		<copy todir="${dist.dir}/classes">
 			<!-- include the default package (examples) source -->
 			<fileset dir="src/java" includes="*.java"/>
 			<fileset dir="${classes.dir}" includes="*.class"/>
 		</copy>
-
 	</target>
 	
 	<target name="test" depends="package">
@@ -146,7 +141,7 @@
 			<arg line="-lib pdj ${pdj.test-patch}"/>
 		</exec>
 	</target>
-
+	
 	<target name="test-dsp" depends="package">
 		<exec dir="${dist.dir}" executable="${pd.home}/bin/pd">
 			<arg line="-lib pdj ${pdj-tilde.test-patch}"/>
@@ -155,50 +150,45 @@
 	
 	<target name="test-mxdublin" depends="package">
 		<ant antfile="../mxdublin/build.xml" target="package" dir="../mxdublin"/>
-			
 		<exec dir="${dist.dir}" executable="${pd.home}/bin/pd">
-			<env key="AWT_TOOLKIT" value="MToolkit"/>
 			<arg line="-lib pdj ../../mxdublin/res/test/test-mxdublin.pd"/>
 		</exec>
 	</target>
-
+	
 	<target name="test-mxdublin-help" depends="package">
-		<ant antfile="../mxdublin/build.xml" target="package" 
-			dir="../mxdublin"/>
+		<ant antfile="../mxdublin/build.xml" target="package" dir="../mxdublin"/>
 		<exec dir="${dist.dir}" executable="${pd.home}/bin/pd">
 			<arg line="-lib pdj ../../mxdublin/res/examples/help-mxdublin.pd"/>
 		</exec>
 	</target>
 	
 	<target name="test-helpatch" depends="package">
-		<exec dir="${dist.dir}" executable="${pd.home}/bin/pd" >
+		<exec dir="${dist.dir}" executable="${pd.home}/bin/pd">
 			<arg line="-lib pdj ../res/help-pdj.pd"/>
 		</exec>
 	</target>
-
+	
 	<target name="dist" depends="clean">
 		<tar destfile="../pdj-${pdj.version}.tar.gz" compression="gzip">
-			<tarfileset dir="." prefix="pdj-${pdj.version}">
-				<exclude name="CVS"/>
-			</tarfileset>
+			<tarfileset dir="." prefix="pdj-${pdj.version}"/>
 		</tar>
 	</target>
-		
+	
 	<target name="javadoc" depends="cl-java">
 		<mkdir dir="${javadoc.dir}"/>
-		<javadoc source="src" destdir="${javadoc.dir}" 
-			     windowtitle="pdj-MXJ API">
+		<javadoc source="src" destdir="${javadoc.dir}" windowtitle="pdj-MXJ API">
 			<fileset dir="src/java">
 				<include name="com/cycling74/max/*.java"/>
 				<include name="com/cycling74/msp/*.java"/>
+				<!-- <include name="com/cycling74/net/*.java"/> -->
 				<exclude name="*.java"/>
 				<exclude name="**/test/**"/>
 				<exclude name="**/*Test.java"/>
 			</fileset>
 			<link href="http://java.sun.com/j2se/1.4.2/docs/api/"/>
-		    <doctitle><![CDATA[<h1>The MXJ Java API for pure-data</h1>
+			<doctitle><![CDATA[<h1>The MXJ Java API for pure-data</h1>
 		    <p>This API is based on MXJ for Max/MSP.</p>]]></doctitle>
-		    <bottom><![CDATA[This API is based on mxj for <a  
+			<bottom><![CDATA[This API is based on mxj for <a  
 		    	href="http://www.cycling74.com/products/maxmsp.html">
 		    	Max/MSP</a> by Cycling74. Please see original MXJ
 			    implementation.]]></bottom>
@@ -208,12 +198,11 @@
 	<target name="dist-www" depends="javadoc">
 		<tar destfile="../pdj-web.tar.gz" compression="gzip">
 			<tarfileset dir="www">
-				<exclude name="CVS"/>
 				<exclude name=".*"/>
 			</tarfileset>
 		</tar>
 	</target>
-	
+
 	<target name="dist-win32" depends="package,javadoc">
 		<zip destfile="${dist.dir}/pdj-${pdj.version}-win32.zip">
 			<zipfileset dir="www/api" includes="**" prefix="javadoc"/>
@@ -230,11 +219,12 @@
 			</fileset>
 		</zip>
 	</target>
-    
+	
 	<target name="dist-osx" depends="package,javadoc">
-		<zip destfile="../pdj-${pdj.version}-${pdj.archBuild}.zip">
+		<zip destfile="../pdj-${pdj.version}-osx.zip">
 			<zipfileset dir="www/api" includes="**" prefix="javadoc"/>
 			<fileset dir="${dist.dir}">
+				<include name="docs/**"/>
 				<include name="classes/**"/>
 				<include name="*.jar"/>
 				<include name="*.pd"/>

Modified: vendor/pdj/current/lib/ant/cpptasks.jar
===================================================================
(Binary files differ)

Added: vendor/pdj/current/res/docs/pdj.odt
===================================================================
(Binary files differ)


Property changes on: vendor/pdj/current/res/docs/pdj.odt
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: vendor/pdj/current/res/docs/pdj.pdf
===================================================================
(Binary files differ)


Property changes on: vendor/pdj/current/res/docs/pdj.pdf
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Modified: vendor/pdj/current/res/pdj.properties
===================================================================
--- vendor/pdj/current/res/pdj.properties	2008-03-22 02:15:12 UTC (rev 9621)
+++ vendor/pdj/current/res/pdj.properties	2008-03-22 02:23:51 UTC (rev 9622)
@@ -13,7 +13,7 @@
 # add your jars or directories of jars seperated with a ':' for unix and
 # ';' for windows
 #
-pdj.system-classpath=/home/asb2m10/workspace/mxdublin/work/mxdublin.jar
+pdj.system-classpath=/home/asb2m10/Documents/workspace/mxdublin/work/mxdublin.jar
 
 # by default from where the pdj.pd_linux is located, every .jar in 
 # ${pdj.home}/lib will be added to the pdj classpath

Modified: vendor/pdj/current/src/MaxClock.c
===================================================================
--- vendor/pdj/current/src/MaxClock.c	2008-03-22 02:15:12 UTC (rev 9621)
+++ vendor/pdj/current/src/MaxClock.c	2008-03-22 02:23:51 UTC (rev 9622)
@@ -11,7 +11,7 @@
 
 
 static t_clockCtnr *getClock(JNIEnv *env, jobject obj) {
-  	return (t_clockCtnr *) (*env)->GetLongField(env, obj, pdjCaching.FIDMaxClock_clock_ptr);
+  	return (t_clockCtnr *) JPOINTER_CAST (*env)->GetLongField(env, obj, pdjCaching.FIDMaxClock_clock_ptr);
 }
 
 

Modified: vendor/pdj/current/src/MaxObject.c
===================================================================
--- vendor/pdj/current/src/MaxObject.c	2008-03-22 02:15:12 UTC (rev 9621)
+++ vendor/pdj/current/src/MaxObject.c	2008-03-22 02:23:51 UTC (rev 9622)
@@ -4,7 +4,7 @@
 
 
 static t_pdj *getMaxObject(JNIEnv *env, jobject obj) {
-  	t_pdj *ret = (t_pdj *) (*env)->GetLongField(env, obj, 
+  	t_pdj *ret = (t_pdj *) JPOINTER_CAST (*env)->GetLongField(env, obj, 
   			pdjCaching.FIDMaxObject_pdobj_ptr);
   	
   	if ( ret == NULL ) 
@@ -27,8 +27,7 @@
   	}
   	
   	proxy = (t_inlet_proxy *) pd_new(inlet_proxy);
-  	pdj->nb_inlet++;
-  	proxy->idx = pdj->nb_inlet;
+  	proxy->idx = pdj->nb_inlet++;
   	proxy->peer = pdj;
   		
   	return (jlong) inlet_new(&pdj->x_obj, &proxy->x_obj.ob_pd, 0, 0); 
@@ -53,28 +52,28 @@
 
 JNIEXPORT void JNICALL Java_com_cycling74_max_MaxObject_doOutletBang
   (JNIEnv *env, jobject obj, jlong outlet) {
-  	t_outlet *x = (t_outlet *) ((unsigned int) outlet);
+  	t_outlet *x = (t_outlet *) (JPOINTER_CAST outlet);
   	outlet_bang(x);
 }
 
 
 JNIEXPORT void JNICALL Java_com_cycling74_max_MaxObject_doOutletFloat
   (JNIEnv *env, jobject obj, jlong outlet , jfloat value) {
-  	t_outlet *x = (t_outlet *) ((unsigned int) outlet);
+  	t_outlet *x = (t_outlet *) (JPOINTER_CAST outlet);
   	outlet_float(x, value);
 }
 
 
 JNIEXPORT void JNICALL Java_com_cycling74_max_MaxObject_doOutletSymbol
   (JNIEnv *env, jobject obj, jlong outlet, jstring value) {
-  	t_outlet *x = (t_outlet *) ((unsigned int) outlet);
+  	t_outlet *x = (t_outlet *) (JPOINTER_CAST outlet);
   	outlet_symbol(x, jstring2symbol(env, value));
 }
 
 
 JNIEXPORT void JNICALL Java_com_cycling74_max_MaxObject_doOutletAnything
   (JNIEnv *env, jobject obj, jlong outlet, jstring str, jobjectArray value) {
-  	t_outlet *x = (t_outlet *) ((unsigned int) outlet);
+  	t_outlet *x = (t_outlet *) (JPOINTER_CAST outlet);
   	t_atom args[MAX_ATOMS_STACK];
   	int argc;
 

Modified: vendor/pdj/current/src/MaxSystem.c
===================================================================
--- vendor/pdj/current/src/MaxSystem.c	2008-03-22 02:15:12 UTC (rev 9621)
+++ vendor/pdj/current/src/MaxSystem.c	2008-03-22 02:23:51 UTC (rev 9622)
@@ -158,7 +158,7 @@
 
 JNIEXPORT jstring JNICALL Java_com_cycling74_max_MaxSystem_locateFile
   (JNIEnv *env, jclass cls, jstring filename) {
-	const jbyte *file = (*env)->GetStringUTFChars(env, filename, NULL);
+	const char *file = (*env)->GetStringUTFChars(env, filename, NULL);
 	char fullpath[MAXPDSTRING], *pfullpath;
 	FILE *fd;
 	

Modified: vendor/pdj/current/src/init.c
===================================================================
--- vendor/pdj/current/src/init.c	2008-03-22 02:15:12 UTC (rev 9621)
+++ vendor/pdj/current/src/init.c	2008-03-22 02:23:51 UTC (rev 9622)
@@ -1,5 +1,5 @@
 /**
- * This code is very ugly and needs rewrite. PERIOD.
+ * initialization
  */
  
 #include <stdio.h>
@@ -97,7 +97,7 @@
 }
 
 
-static void copyToJavaSystemProperties(JNIEnv *env) {
+void copyToJavaSystemProperties(JNIEnv *env) {
 	jclass system = (*env)->FindClass(env, "java/lang/System");		
 	jmethodID id = (*env)->GetStaticMethodID(env, system, "setProperty", "(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;");
 	int i;
@@ -232,8 +232,8 @@
 }
 
 
-void buildVMOptions(jint *nb, JavaVMOption *options) {
-	static char cp[BUFFER_SIZE], pdj_cp[BUFFER_SIZE];
+static void buildVMOptions(jint *nb, JavaVMOption *options) {
+	static char cp[BUFFER_SIZE];
 	char installPath[BUFFER_SIZE];
 	char *prop;
 	char *token, *work;
@@ -316,7 +316,7 @@
 	vm_args.options = opt;
     vm_args.version = JNI_VERSION_1_4;
     vm_args.ignoreUnrecognized = JNI_FALSE; 
-		
+				
 	vm_type = pdj_getProperty("pdj.vm_type");
 	if ( vm_type == NULL ) {
 		error("pdj: unknown vm_type, using client");
@@ -332,12 +332,12 @@
 		error("pdj: unable to create JVM: JNI_CreateJavaVM = %d", rc);
 		return NULL;
 	}
-
-	copyToJavaSystemProperties(jni_env);
-	if ( initIDCaching(jni_env) != 0) {
+	    
+	if ( initIDCaching(jni_env) != 0 ) {
 		return NULL;
 	}
 	
+	copyToJavaSystemProperties(jni_env);
 	if ( linkClasses(jni_env) != 0 ) {
 		return NULL;
 	}

Modified: vendor/pdj/current/src/java/com/cycling74/max/MaxObject.java
===================================================================
--- vendor/pdj/current/src/java/com/cycling74/max/MaxObject.java	2008-03-22 02:15:12 UTC (rev 9621)
+++ vendor/pdj/current/src/java/com/cycling74/max/MaxObject.java	2008-03-22 02:23:51 UTC (rev 9622)
@@ -806,7 +806,7 @@
 	}
 	
 	/**
-	 * Tries to instanciate a MaxObject.
+	 * Tries to instantiate a MaxObject.
 	 * @param name fq java name
 	 * @param _pdobj_ptr C pointer to pd object
 	 * @param args objects arguments
@@ -844,7 +844,7 @@
             
             pushPdjPointer(_pdobj_ptr);
             
-            // instanciate the object
+            // instantiate the object
 			if ( args.length > 0 ) {
 				try {
 					Object argValue[] = new Object[1];

Modified: vendor/pdj/current/src/java/com/cycling74/max/MaxRuntimeException.java
===================================================================
--- vendor/pdj/current/src/java/com/cycling74/max/MaxRuntimeException.java	2008-03-22 02:15:12 UTC (rev 9621)
+++ vendor/pdj/current/src/java/com/cycling74/max/MaxRuntimeException.java	2008-03-22 02:23:51 UTC (rev 9622)
@@ -5,11 +5,15 @@
  */
 public class MaxRuntimeException extends RuntimeException {
 
+    public MaxRuntimeException() {
+    }
+    
     public MaxRuntimeException(String msg) {
         super(msg);
     }
 
-    public MaxRuntimeException() {
-    }
+	public MaxRuntimeException(Exception e) {
+		super(e);
+	}
 
 }

Modified: vendor/pdj/current/src/java/com/cycling74/max/MaxSystem.java
===================================================================
--- vendor/pdj/current/src/java/com/cycling74/max/MaxSystem.java	2008-03-22 02:15:12 UTC (rev 9621)
+++ vendor/pdj/current/src/java/com/cycling74/max/MaxSystem.java	2008-03-22 02:23:51 UTC (rev 9622)
@@ -171,7 +171,7 @@
 	}
 	
 	// constants
-	public static String MXJ_VERSION = "pdj 0.8.3";
+	public static String MXJ_VERSION = "pdj 0.8.4";
 	
 	public static final int PATH_STYLE_COLON		= 2;
 	public static final int PATH_STYLE_MAX			= 0;

Modified: vendor/pdj/current/src/java/com/cycling74/msp/AudioFileBuffer.java
===================================================================
--- vendor/pdj/current/src/java/com/cycling74/msp/AudioFileBuffer.java	2008-03-22 02:15:12 UTC (rev 9621)
+++ vendor/pdj/current/src/java/com/cycling74/msp/AudioFileBuffer.java	2008-03-22 02:23:51 UTC (rev 9622)
@@ -12,7 +12,7 @@
 import com.cycling74.max.MessageReceiver;
 
 /**
- * Work in progress, target: 0.8.4
+ * Work in progress, target: 0.8.5
  */
 class AudioFileBuffer {
     

Added: vendor/pdj/current/src/java/com/cycling74/net/TcpReceiver.java
===================================================================
--- vendor/pdj/current/src/java/com/cycling74/net/TcpReceiver.java	                        (rev 0)
+++ vendor/pdj/current/src/java/com/cycling74/net/TcpReceiver.java	2008-03-22 02:23:51 UTC (rev 9622)
@@ -0,0 +1,89 @@
+package com.cycling74.net;
+
+import java.lang.reflect.Method;
+import java.net.DatagramPacket;
+import java.net.DatagramSocket;
+
+import com.cycling74.max.Atom;
+import com.cycling74.max.MaxRuntimeException;
+import com.cycling74.max.MaxSystem;
+
+/** 
+ * This portion of code is scheduled for pdj-0.8.5
+ * IT IS NOT FUNCTIONAL
+ */
+public class TcpReceiver implements Runnable {
+	DatagramSocket receiver;
+	DatagramPacket packet;
+	
+	Method callback = null;
+	Object instance;
+	
+	String debugString = null;
+	int port;
+	boolean runnable = true;
+	
+	public void close() {
+		if ( receiver == null ) 
+			return;
+		runnable = false;
+		receiver.close();		
+	}
+	
+	public int getPort() {
+		return port;
+	}
+	
+	public void setActive(boolean active) {
+		if ( active == false ) {
+			runnable = true;
+			new Thread(this).start();
+		} else {
+			close();
+		}
+		
+	}
+	
+	public void setCallback(Object caller, String methodName) {
+		try {
+			callback = caller.getClass().getDeclaredMethod(methodName, new Class[] { Atom.class });
+			instance = caller;
+		} catch (Exception e) {
+			throw new MaxRuntimeException(e);
+		}
+	}
+	
+	public void setPort(int port) {
+		setActive(false);
+		this.port = port;
+	}
+	
+	public void setDebugString(String debugString) {
+		this.debugString = debugString;
+	}
+	
+	public void run() {
+		DatagramPacket packet = new DatagramPacket(new byte[4096], 4096);
+		Object callerArgs[] = new Object[1];
+		
+		try {
+			while(runnable) {
+					receiver.receive(packet);
+					String msg = new String(packet.getData(), 0, packet.getLength());
+					if ( debugString != null )
+						MaxSystem.post(debugString + " " + msg);
+					callerArgs[0] = Atom.parse(msg);
+					try {
+						callback.invoke(instance, callerArgs);
+					} catch( Exception e ) {
+						e.printStackTrace();
+					}
+			}
+		} catch (Exception e) {
+			if ( runnable != false) {
+				runnable = false;
+				throw new MaxRuntimeException(e);
+			}
+		}
+	}
+}

Added: vendor/pdj/current/src/java/com/cycling74/net/TcpSender.java
===================================================================
--- vendor/pdj/current/src/java/com/cycling74/net/TcpSender.java	                        (rev 0)
+++ vendor/pdj/current/src/java/com/cycling74/net/TcpSender.java	2008-03-22 02:23:51 UTC (rev 9622)
@@ -0,0 +1,103 @@
+package com.cycling74.net;
+
+import java.io.IOException;
+import java.net.DatagramPacket;
+import java.net.DatagramSocket;
+import java.net.InetSocketAddress;
+
+import com.cycling74.max.Atom;
+import com.cycling74.max.MaxRuntimeException;
+
+/** 
+ * This portion of code is scheduled for pdj-0.8.5
+ * IT IS NOT FUNCTIONAL
+ */
+public class TcpSender {
+	DatagramSocket sender;
+	DatagramPacket packet;
+	String address = null;
+	int port = -1;
+	
+	public TcpSender() {
+	}
+	
+	public TcpSender(String address, int port) {
+		this.address= address;
+		this.port = port;
+	}
+	
+	public void send(Atom args[]) {
+		if ( sender == null )
+			initsocket();
+		
+		byte buff[] = Atom.toOneString(args).getBytes();
+		packet.setData(buff, 0, buff.length);
+		try {
+			sender.send(packet);
+		} catch (IOException e) {
+			throw new MaxRuntimeException(e);
+		}
+	}
+	
+	public void send(int i) {
+		if ( sender == null )
+			initsocket();
+		
+		byte buff[] = Integer.toString(i).getBytes();
+		packet.setData(buff, 0, buff.length);
+		try {
+			sender.send(packet);
+		} catch (IOException e) {
+			throw new MaxRuntimeException(e);
+		}
+	}
+	
+	public void send(float f) {
+		if ( sender == null ) 
+			initsocket();
+		
+		byte buff[] = Float.toString(f).getBytes();
+		packet.setData(buff, 0, buff.length);
+		try {
+			sender.send(packet);
+		} catch (IOException e) {
+			throw new MaxRuntimeException(e);
+		}
+	}
+
+	public String getAddress() {
+		return address;
+	}
+	
+	public void setAddress(String address) {
+		if ( sender != null ) { 
+			sender = null;
+			sender.close();
+		}
+		this.address = address;
+	}
+	
+	public int getPort() {
+		return port;
+	}
+	
+	public void setPort(int port) {
+		if ( sender != null ) {
+			sender = null;
+			sender.close();
+		}
+		this.port = port;
+	}
+	
+	private synchronized void initsocket() {
+		if ( sender != null )
+			return;
+		try {
+			sender = new DatagramSocket();
+			sender.connect(new InetSocketAddress(address, port));
+			packet = new DatagramPacket(new byte[0], 0);
+		} catch (Exception e) {
+			throw new MaxRuntimeException(e);
+		}
+	}
+}

Added: vendor/pdj/current/src/java/com/cycling74/net/UdpReceiver.java
===================================================================
--- vendor/pdj/current/src/java/com/cycling74/net/UdpReceiver.java	                        (rev 0)
+++ vendor/pdj/current/src/java/com/cycling74/net/UdpReceiver.java	2008-03-22 02:23:51 UTC (rev 9622)
@@ -0,0 +1,84 @@
+package com.cycling74.net;
+
+import java.net.DatagramPacket;
+import java.net.DatagramSocket;
+
+import com.cycling74.max.Atom;
+import com.cycling74.max.MaxRuntimeException;
+import com.cycling74.max.MaxSystem;
+import com.cycling74.max.Callback;
+
+/** 
+ * This portion of code is scheduled for pdj-0.8.5
+ * IT IS NOT FUNCTIONAL
+ */
+public class UdpReceiver implements Runnable {
+	DatagramSocket receiver;
+	DatagramPacket packet;
+	
+	Callback callback;
+	
+	String debugString = null;
+	int port;
+	boolean runnable = true;
+	
+	public void close() {
+		if ( receiver == null ) 
+			return;
+		runnable = false;
+		receiver.close();		
+	}
+	
+	public int getPort() {
+		return port;
+	}
+	
+	public void setActive(boolean active) {
+		if ( active == false ) {
+			runnable = true;
+			new Thread(this).start();
+		} else {
+			close();
+		}
+		
+	}
+	
+	public void setCallback(Object caller, String methodName) {
+	    callback = new Callback(caller, methodName);
+	}
+	
+	public void setPort(int port) {
+		setActive(false);
+		this.port = port;
+	}
+	
+	public void setDebugString(String debugString) {
+		this.debugString = debugString;
+	}
+	
+	public void run() {
+		DatagramPacket packet = new DatagramPacket(new byte[4096], 4096);
+		Object callerArgs[] = new Object[1];
+		
+		try {
+			while(runnable) {
+					receiver.receive(packet);
+					String msg = new String(packet.getData(), 0, packet.getLength());
+					if ( debugString != null )
+						MaxSystem.post(debugString + " " + msg);
+					callerArgs[0] = Atom.parse(msg);
+
+		/*			try {
+						callback.invoke(instance, callerArgs);
+					} catch( Exception e ) {
+						e.printStackTrace();
+					} */
+			}
+		} catch (Exception e) {
+			if ( runnable != false) {
+				runnable = false;
+				throw new MaxRuntimeException(e);
+			}
+		}
+	}
+}

Added: vendor/pdj/current/src/java/com/cycling74/net/UdpSender.java
===================================================================
--- vendor/pdj/current/src/java/com/cycling74/net/UdpSender.java	                        (rev 0)
+++ vendor/pdj/current/src/java/com/cycling74/net/UdpSender.java	2008-03-22 02:23:51 UTC (rev 9622)
@@ -0,0 +1,84 @@
+package com.cycling74.net;
+
+import java.io.IOException;
+import java.net.DatagramPacket;
+import java.net.DatagramSocket;
+import java.net.InetAddress;
+
+import com.cycling74.max.Atom;
+import com.cycling74.max.MaxRuntimeException;
+
+/** 
+ * This portion of code is scheduled for pdj-0.8.5
+ * IT IS NOT FUNCTIONAL
+ */
+public class UdpSender {
+    InetAddress inetAddress;
+	DatagramSocket sender;
+	boolean init;
+	
+	String address = null;
+	int port = -1;
+	
+	public UdpSender() {
+	}
+	
+	public UdpSender(String address, int port) {
+		this.address = address;
+		this.port = port;
+		initsocket();
+	}
+	
+	public void send(Atom args[]) {
+		send(Atom.toOneString(args).getBytes());
+	}
+	
+	public void send(int i) {
+		send(Integer.toString(i).getBytes());
+	}
+	
+	public void send(float f) {
+		send(Float.toString(f).getBytes());
+	}
+
+	public String getAddress() {
+		return address;
+	}
+	
+	public void setAddress(String address) {
+		this.address = address;
+		initsocket();
+	}
+	
+	public int getPort() {
+		return port;
+	}
+	
+	public void setPort(int port) {
+		this.port = port;
+		initsocket();
+	}
+	
+	synchronized void initsocket() {
+		try {
+		    sender = null;
+		    inetAddress = InetAddress.getByName(address);
+			sender = new DatagramSocket();
+		} catch (Exception e) {
+			throw new MaxRuntimeException(e);
+		}
+	}
+
+	void send(byte buff[]) {
+	    if ( sender == null )
+	        throw new MaxRuntimeException("UdpSender is not initialized");
+
+	    try {
+	        DatagramPacket packet = new DatagramPacket(buff, buff.length, inetAddress, port);
+	        sender.send(packet);
+	    } catch (IOException e) {
+	        throw new MaxRuntimeException(e);
+	    }
+
+	}
+}

Modified: vendor/pdj/current/src/java/com/e1/pdj/JikesCompiler.java
===================================================================
--- vendor/pdj/current/src/java/com/e1/pdj/JikesCompiler.java	2008-03-22 02:15:12 UTC (rev 9621)
+++ vendor/pdj/current/src/java/com/e1/pdj/JikesCompiler.java	2008-03-22 02:23:51 UTC (rev 9622)
@@ -1,6 +1,5 @@
 package com.e1.pdj;
 
-import java.io.*;
 import com.cycling74.max.MaxSystem;
 
 public class JikesCompiler extends GenericCompiler {

Modified: vendor/pdj/current/src/java/com/e1/pdj/PDJSystem.java
===================================================================
--- vendor/pdj/current/src/java/com/e1/pdj/PDJSystem.java	2008-03-22 02:15:12 UTC (rev 9621)
+++ vendor/pdj/current/src/java/com/e1/pdj/PDJSystem.java	2008-03-22 02:23:51 UTC (rev 9622)
@@ -7,6 +7,7 @@
 import java.awt.Toolkit;
 import java.io.*;
 
+import java.awt.GraphicsEnvironment;
 /**
  * Startup class for pdj.
  */
@@ -50,7 +51,7 @@
 		// this is a hack to be sure that statics of MaxSystem are loaded
 		// before everything
 		Class cls = MaxSystem.class;
-
+		
 		String osname = System.getProperty("os.name");
 
 		if ( osname.indexOf("Linux") != -1 ) {
@@ -71,20 +72,13 @@
 
 		if ( osname.indexOf("OS X") != -1 ) {
 			// maps PD object as a JVM native library
-			try {
-				Runtime.getRuntime().load(pdjHome + "/pdj.pd_darwin");
-			} catch (UnsatisfiedLinkError e ) {
-				Runtime.getRuntime().load(pdjHome + "/pdj.pd_imac");
-			}
+			Runtime.getRuntime().load(pdjHome + "/pdj.d_fat");
 			loaded = 1;
- 
-            // this will initialize the AWT component in another thread
-            new Thread(new Runnable() {
-            		public void run() {
-                    Class clz = Component.class;
-            		}
-    			}).start();
 
+            if ( System.getenv("PDJ_USE_AWT") != null ) {
+			    GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices();
+			    Toolkit.getDefaultToolkit();
+            }
 			GenericCompiler.rtJar = "/System/Library/Frameworks/JavaVM.framework/Classes/classes.jar:";
 
 			return;

Modified: vendor/pdj/current/src/java/pdj_test_class.java
===================================================================
--- vendor/pdj/current/src/java/pdj_test_class.java	2008-03-22 02:15:12 UTC (rev 9621)
+++ vendor/pdj/current/src/java/pdj_test_class.java	2008-03-22 02:23:51 UTC (rev 9622)
@@ -9,6 +9,7 @@
 		clock = new MaxClock(this);
 
 		declareAttribute("patate");
+		declareIO(2,2);
 	}
 
 	public pdj_test_class(Atom args[]) {
@@ -49,7 +50,7 @@
 	}
 
 	protected void inlet(float f) {
-		post("le float " + f);
+		post("le float " + f + "inlet " + getInlet());
 	}
 
 	void wer(Atom[] atom) {

Added: vendor/pdj/current/src/pd_patch/osx_extsched_fix.patch
===================================================================
--- vendor/pdj/current/src/pd_patch/osx_extsched_fix.patch	                        (rev 0)
+++ vendor/pdj/current/src/pd_patch/osx_extsched_fix.patch	2008-03-22 02:23:51 UTC (rev 9622)
@@ -0,0 +1,29 @@
+--- s_loader.orig	2008-03-12 11:19:15.000000000 -0400
++++ s_loader.c	2008-03-12 11:18:09.000000000 -0400
+@@ -247,7 +247,7 @@
+     typedef int (*t_externalschedlibmain)(const char *);
+     t_externalschedlibmain externalmainfunc;
+     char filename[MAXPDSTRING];
+-    snprintf(filename, sizeof(filename), "%s.%s", externalschedlibname,
++    snprintf(filename, sizeof(filename), "%s%s", externalschedlibname,
+         sys_dllextent);
+     sys_bashfilename(filename, filename);
+ #ifdef MSW
+@@ -255,7 +255,7 @@
+         HINSTANCE ntdll = LoadLibrary(filename);
+         if (!ntdll)
+         {
+-            post("%s: couldn't load external scheduler lib ", filename);
++            fprintf(stderr, "%s: couldn't load external scheduler lib ", filename);
+             return (0);
+         }
+         externalmainfunc =
+@@ -266,7 +266,7 @@
+         void *dlobj = dlopen(filename, RTLD_NOW | RTLD_GLOBAL);
+         if (!dlobj)
+         {
+-            post("%s: %s", filename, dlerror());
++            fprintf(stderr, "%s: %s\n", filename, dlerror());
+             return (0);
+         }
+         externalmainfunc = (t_externalschedlibmain)dlsym(dlobj,

Modified: vendor/pdj/current/src/pdj-linux.c
===================================================================
--- vendor/pdj/current/src/pdj-linux.c	2008-03-22 02:15:12 UTC (rev 9621)
+++ vendor/pdj/current/src/pdj-linux.c	2008-03-22 02:23:51 UTC (rev 9622)
@@ -4,6 +4,19 @@
 #include <dlfcn.h>
 #include "pdj.h"
 
+// test if this system is amd64
+#ifdef __LP64__
+	#define ARCH "amd64"
+	#define MAPPOS 73
+#else
+	#define ARCH "i386"
+	#define MAPPOS 49
+#endif
+
+/*
+ * This is why it is called getuglylibpath... getting the info from /proc...
+ * if you have a better idea; well I would like to be informed
+ */
 int getuglylibpath(char *path) {
     char buffer[BUFFER_SIZE];
     FILE *f;
@@ -20,7 +33,7 @@
         fgets(buffer, BUFFER_SIZE-1, f);
         if ( strstr(buffer, "pdj.pd_linux") != NULL ) {
             buffer[strlen(buffer) - 14] = 0;
-            strcpy(path, buffer+49);
+            strcpy(path, buffer + MAPPOS);
             fclose(f);
             return 0;
         }
@@ -43,7 +56,7 @@
 	if ( javahome == NULL ) {
 		javahome = getenv("JAVA_HOME");
 	} else {
-		sprintf(work, "%s/jre/lib/i386/%s/libjvm.so", javahome, vm_type);
+		sprintf(work, "%s/jre/lib/" ARCH "/%s/libjvm.so", javahome, vm_type);
 		libVM = dlopen(work, RTLD_LAZY);
 		
 		if ( libVM == NULL ) {
@@ -60,20 +73,20 @@
 		/* using LD_LIBRARY_PATH + putenv doesn't work, load std jvm libs 
 		 * with absolute path. order is important.
 		 */	
-		sprintf(work, "%s/jre/lib/i386/%s/libjvm.so", javahome, vm_type);
+		sprintf(work, "%s/jre/lib/" ARCH "/%s/libjvm.so", javahome, vm_type);
 		dlopen(work, RTLD_LAZY);
 				
-		sprintf(work, "%s/jre/lib/i386/libverify.so", javahome);
+		sprintf(work, "%s/jre/lib/" ARCH "/libverify.so", javahome);
 		dlopen(work, RTLD_LAZY);
 			
-		sprintf(work, "%s/jre/lib/i386/libjava.so", javahome);
+		sprintf(work, "%s/jre/lib/" ARCH "/libjava.so", javahome);
 		dlopen(work, RTLD_LAZY);
 		
-		sprintf(work, "%s/jre/lib/i386/libmlib_image.so", javahome);
+		sprintf(work, "%s/jre/lib/" ARCH "/libmlib_image.so", javahome);
 		dlopen(work, RTLD_LAZY);
 
 		/* ELF should support dynamic LD_LIBRARY_PATH :( :( :( */
-		sprintf(work, "%s/jre/lib/i386/libjava.so", javahome);
+		sprintf(work, "%s/jre/lib/" ARCH "/libjava.so", javahome);
 		libVM = dlopen(work, RTLD_LAZY);		
 	}		
 	

Modified: vendor/pdj/current/src/pdj-osx.c
===================================================================
--- vendor/pdj/current/src/pdj-osx.c	2008-03-22 02:15:12 UTC (rev 9621)
+++ vendor/pdj/current/src/pdj-osx.c	2008-03-22 02:23:51 UTC (rev 9622)
@@ -2,13 +2,171 @@
 #include <string.h>
 #include <pthread.h>
 #include <CoreFoundation/CoreFoundation.h>
+#include <mach-o/dyld.h>
+#include <mach-o/ldsyms.h>
+#include <sys/stat.h>
+#include <sys/resource.h>
 
 #include "pdj.h"
 
+/**
+ * === USING AWT WITH OS X
+ *
+ * Unlike Linux or Windows, you cannot just simply fire-up a AWT form on OS X. This is 
+ * because the event GUI mecanism has these limitation :
+ * 
+ * --> A CFRunLoopRun must be park in the main thread.
+ * --> Java must be run in a secondary thread.
+ *
+ * Since this prerequisite need a pure-data patch, we will write our own pd scheduler.
+ * This scheduler will simple fire-up another thread that will run the real pd 
+ * scheduler (m_mainloop) and park the main thread with a CFRunLoopRun.
+ * 
+ * To be able to use the pdj scheduler, you need to apply a patch to pd. (Yes there
+ * is a bug with the -schedlib option). The patch is available in the directory
+ * src/pd_patch/osx_extsched_fix.patch. This patch has been made on a miller's 41.2
+ * pd version.
+ *
+ * Once the patch is applied and compiled, you must configure your pure-data environement
+ * to add the option : -schedlib [fullpath of the pdj external without the extension]. Use
+ * the menu Pd -> Preference -> Startup to do this. Don't forget to click on [Save All
+ * Settings].
+ * 
+ * Be carfull when you configure this switch since it can crash PD on startup. If you do
+ * have the problem; you will have to delete all pd-preference by deleting file:
+ * ~/Library/Preferences/org.puredata.pd.plist
+ * 
+ * If the scheduler is loaded, you should have this pd message :
+ *    'pdj: using pdj scheduler for Java AWT.'
+ */
+
+int rc_pd = 0xFF;
+CFRunLoopRef cfrunloop;
+
+
+/* setting the environment varible APP_NAME_<pid> to the applications name */
+/* sets it for the application menu */
+void setAppName(const char * name) {
+    char a[32];
+    pid_t id = getpid();
+    sprintf(a,"APP_NAME_%ld",(long)id);
+    setenv(a, name, 1);
+}
+
+
+/** 
+ * The main pd thread, will become a secondary thread to AWT.
+ */
+void *pdj_pdloop(void *notused) {
+    post("pdj: using pdj scheduler for Java AWT.");
+    rc_pd = 0;        
+
+    // this will tell the java init code to initialize AWT before anything
+    setenv("PDJ_USE_AWT", "true", 1);
+
+    // we create the JVM now
+    init_jvm();
+
+    /* open audio and MIDI */
+    sys_reopen_midi();
+    sys_reopen_audio();
+
+    rc_pd = m_mainloop();
+    
+    exit(rc_pd);
+}
+
+
+/* call back for dummy source used to make sure the CFRunLoop doesn't exit right away */
+/* This callback is called when the source has fired. */
+void sourceCallBack (  void *info  ) {
+}
+
+
+/**
+ * This function is called when pdj is considered a scheduler on pd
+ */
+int pd_extern_sched(void *notused) {    
+    CFRunLoopSourceContext sourceContext;
+
+    /* Start the thread that runs the pure-data main thread and the VM. */
+    pthread_t vmthread;    
+
+	setAppName("pdj");
+
+	/* create a new pthread copying the stack size of the primordial pthread */ 
+    struct rlimit limit;
+    size_t stack_size = 0;
+    int rc = getrlimit(RLIMIT_STACK, &limit);
+    if (rc == 0) {
+        if (limit.rlim_cur != 0LL) {
+            stack_size = (size_t)limit.rlim_cur;
+        }
+    }
+    
+    pthread_attr_t thread_attr;
+    pthread_attr_init(&thread_attr);
+    pthread_attr_setscope(&thread_attr, PTHREAD_SCOPE_SYSTEM);
+    pthread_attr_setdetachstate(&thread_attr, PTHREAD_CREATE_DETACHED);
+    if (stack_size > 0) {
+        pthread_attr_setstacksize(&thread_attr, stack_size);
+    }
+	
+    /* Start the thread that we will start the pd main thread */
+    pthread_create(&vmthread, &thread_attr, pdj_pdloop, NULL);
+   	pthread_attr_destroy(&thread_attr);
+   	    
+    /* Create a a sourceContext to be used by our source that makes */
+    /* sure the CFRunLoop doesn't exit right away */
+    sourceContext.version = 0;
+    sourceContext.info = NULL;
+    sourceContext.retain = NULL;
+    sourceContext.release = NULL;
+    sourceContext.copyDescription = NULL;
+    sourceContext.equal = NULL;
+    sourceContext.hash = NULL;
+    sourceContext.schedule = NULL;
+    sourceContext.cancel = NULL;
+    sourceContext.perform = &sourceCallBack;
+    
+    /* Create the Source from the sourceContext */
+    CFRunLoopSourceRef sourceRef = CFRunLoopSourceCreate(NULL, 0, &sourceContext);
+    
+    /* Use the constant kCFRunLoopCommonModes to add the source to the set of objects */ 
+    /* monitored by all the common modes */
+    CFRunLoopAddSource (CFRunLoopGetCurrent(), sourceRef, kCFRunLoopCommonModes); 
+    
+    /* Park this thread in the runloop for Java */
+    CFRunLoopRun();
+    
+	return rc_pd;
+}
+
+
 int getuglylibpath(char *path) {
 	char fullpath[MAXPDSTRING], *pfullpath;
+    int cnt = _dyld_image_count();
+	char *imagename = NULL;
 	FILE *fd;
+    int i;    
+
+    // we get the bundle header, that contains the dyld header too...
+    struct mach_header* header = (struct mach_header*) &_mh_bundle_header;
+    
+    for(i=1;i<cnt;i++) {
+        if (_dyld_get_image_header(i) == header)
+            imagename = (char *) _dyld_get_image_name(i);
+    }
+
+	if ( imagename != NULL ) {		
+        strncpy(path, imagename, MAXPDSTRING);
+	    // remove the pdj.pd_fat text
+        path[strlen(imagename) - 10] = 0;
+        return 0;
+	} 
 	
+    error("unable to find pdj directory, looking into the user PD path");
+	
 	fd = (FILE *) open_via_path("", "pdj.properties", "", fullpath, &pfullpath, MAXPDSTRING, 0);
 	if ( fd != NULL ) {
 		close(fd);
@@ -26,6 +184,7 @@
     return 1;
 }
 
+
 JNI_CreateJavaVM_func *linkjvm(char *vmtype) {
 	char *jvmVersion = pdj_getProperty("pdj.osx.JAVA_JVM_VERSION");
 	
@@ -33,5 +192,9 @@
 		setenv("JAVA_JVM_VERSION", jvmVersion, 1);
 	}
 
+    if ( rc_pd == 0xFF ) {
+        post("pdj: warning: Java is initialized from main thread. AWT can lock pure-data environment. See pdj/pd scheduler to cover this problem.");
+    }
+
     return (JNI_CreateJavaVM_func *) &JNI_CreateJavaVM;
-}
\ No newline at end of file
+}

Modified: vendor/pdj/current/src/pdj.h
===================================================================
--- vendor/pdj/current/src/pdj.h	2008-03-22 02:15:12 UTC (rev 9621)
+++ vendor/pdj/current/src/pdj.h	2008-03-22 02:23:51 UTC (rev 9622)
@@ -3,11 +3,12 @@
 
 #ifdef DEBUG
    #define ASSERT(v) { if ( v == NULL ) {bug("ouch, assertion failed %s:%d\n", __FILE__, __LINE__);}}
-   #define JASSERT(v) { if ( v == NULL ){(*env)->ExceptionDescribe(env);bug("ouch, assertion failed %s:%d\n", __FILE__, __LINE__);}}
+   #define JASSERT(v) { if ( v == NULL ) {(*env)->ExceptionDescribe(env);bug("ouch, jni assertion failed %s:%d\n", __FILE__, __LINE__);}}
    #undef  DEBUG
    #define DEBUG(X) {X};
 #else 
    #define ASSERT(v)
+   #undef  DEBUG
    #define DEBUG(X)
    #define JASSERT(v)
 #endif
@@ -28,6 +29,12 @@
 	#define PATH_SEP ":"
 #endif
 
+#ifdef __LP64__
+	#define JPOINTER_CAST (unsigned long)
+#else 
+	#define JPOINTER_CAST (unsigned int)
+#endif
+
 // the JVM takes 50M; I don't care taking 4K...
 #define BUFFER_SIZE 4096
 

Modified: vendor/pdj/current/src/pdj~.c
===================================================================
--- vendor/pdj/current/src/pdj~.c	2008-03-22 02:15:12 UTC (rev 9621)
+++ vendor/pdj/current/src/pdj~.c	2008-03-22 02:23:51 UTC (rev 9622)
@@ -20,12 +20,13 @@
 	/* call the performer */
 	(*env)->CallVoidMethod(env, pdjt->pdj.obj, pdjt->performer,
 		pdjt->_used_inputs, pdjt->_used_outputs);
-		
+
+	/* set work to output outlets */
+	work = i + 3;
+			
 	/* if an exception occured, stop the dsp processing for this object */
 	if ( (*env)->ExceptionOccurred(env) ) {
 		int tmp;
-
-		work = i + 3;
 		
 		/* insert silence */
 		for (tmp=0;tmp<pdjt->outs_count;tmp++) {
@@ -41,7 +42,6 @@
 	}
 	
 	/* copy buffer out */
-	work = i + 3;
 	for (i=0;i<pdjt->outs_count;i++) {
 		t_sample *out = (t_sample *)(w[work+i]);
 		(*env)->GetFloatArrayRegion(env, pdjt->outs[i], 0, sz, out);

Modified: vendor/pdj/current/src/type_handler.c
===================================================================
--- vendor/pdj/current/src/type_handler.c	2008-03-22 02:15:12 UTC (rev 9621)
+++ vendor/pdj/current/src/type_handler.c	2008-03-22 02:23:51 UTC (rev 9622)
@@ -4,7 +4,7 @@
 
 int jatom2atom(JNIEnv *env, jobject jatom, t_atom *atom) {
 	int type = (*env)->GetIntField(env, jatom, pdjCaching.FIDAtom_type);
-	const jbyte *symbolValue;
+	const char *symbolValue;
 	jstring value;
 	
 	switch(type) {
@@ -121,7 +121,7 @@
 
 
 t_symbol *jstring2symbol(JNIEnv *env, jstring strvalue) {
-	const jbyte *tmp = (*env)->GetStringUTFChars(env, strvalue, NULL);
+	const char *tmp = (*env)->GetStringUTFChars(env, strvalue, NULL);
 	t_symbol *value;
 	
 	JASSERT(tmp);

Modified: vendor/pdj/current/www/index.html
===================================================================
--- vendor/pdj/current/www/index.html	2008-03-22 02:15:12 UTC (rev 9621)
+++ vendor/pdj/current/www/index.html	2008-03-22 02:23:51 UTC (rev 9622)
@@ -34,16 +34,19 @@
 than the .class, pdj will compile it for you.</p>
 <h2>Requirements:</h2>
 <li><a href="http://www-crca.ucsd.edu/%7Emsp/software.html">pure-data</a>
-0.38.x or better</li>
+0.40.x or better</li>
 <li><a href="http://java.sun.com">java jdk</a> 1.4.x or better; <i><b>use java 1.5 !!!</b></i></li>
 <li><a href="http://ant.apache.org">apache ant</a> 1.5.x or better for
 building</li>
-<li><b>works on linux, os x (tested on 10.4) and windows</b></li>
+<li><b>works on Linux / Windows / OS X</b></li>
 <h2>Download:</h2>
-<p>Download latest release here: <a href="pdj-0.8.3.tar.gz">pdj-0.8.3.tar.gz</a>
-/ <a href="pdj-0.8.3-win32.zip">pdj-0.8.3-win32.zip</a>
-(September 9 2006)
+<p>Download latest release here: <a href="pdj-0.8.4.tar.gz">pdj-0.8.4.tar.gz</a>
+/ <a href="pdj-0.8.4-win32.zip">pdj-0.8.4-win32.zip</a>
+/ <a href="pdj-0.8.4-osx.zip">pdj-0.8.4-osx.zip</a>
+(March 2008)
 </p>
+<p>Documentation: <a href="pdj.pdf">pdj.pdf</a></p>
+
 <small>Contact: asb2m10 .at. users.sourceforge.net</small>
 </body>
 </html>


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Pd-cvs mailing list