aboutsummaryrefslogtreecommitdiff
path: root/pd
diff options
context:
space:
mode:
authorDavide Morelli <morellid@users.sourceforge.net>2006-01-16 16:26:58 +0000
committerDavide Morelli <morellid@users.sourceforge.net>2006-01-16 16:26:58 +0000
commit447a1fe81422c021e33787ba11c56fa34d379c9d (patch)
tree8ecefbac29923517d3daa0fb2081b2fe3cea8877 /pd
parent6727d8b42c156a14ea690ceff639fcc1ad7f18af (diff)
now selectors take delegates instead of function names, lists without selectors ok, added the PureData.dll assembly to let people compile externals without having to compile the pd project
svn path=/trunk/externals/clr/; revision=4424
Diffstat (limited to 'pd')
-rwxr-xr-xpd/Atom.cs22
-rwxr-xr-xpd/pd.cs152
2 files changed, 76 insertions, 98 deletions
diff --git a/pd/Atom.cs b/pd/Atom.cs
index 17c7183..e6c723e 100755
--- a/pd/Atom.cs
+++ b/pd/Atom.cs
@@ -31,4 +31,24 @@ namespace PureData
this.string_value = s;
}
}
-} \ No newline at end of file
+ // this struct is relative to this c struct, see clr.c
+
+ /*
+ // simplyfied atom
+ typedef struct atom_simple atom_simple;
+ typedef enum
+ {
+ A_S_NULL=0,
+ A_S_FLOAT=1,
+ A_S_SYMBOL=2,
+ } t_atomtype_simple;
+ typedef struct atom_simple
+ {
+ t_atomtype_simple a_type;
+ union{
+ float float_value;
+ MonoString *string_value;
+ } stuff;
+ };
+ */
+}
diff --git a/pd/pd.cs b/pd/pd.cs
index a0f28aa..1ec0903 100755
--- a/pd/pd.cs
+++ b/pd/pd.cs
@@ -9,15 +9,47 @@ namespace PureData
public class pd
{
+ public delegate void DelegateWithoutArguments();
+ public delegate void DelegateFloat(float f);
+ public delegate void DelegateString(ref string s);
+ public delegate void DelegateArray(Atom [] atoms);
+
[MethodImplAttribute (MethodImplOptions.InternalCall)]
private extern static void RegisterSelector (IntPtr x, string sel, string met, int type);
// function called by the user
- public static void AddSelector(IntPtr x, string sel, string met, ParametersType type)
+ public static void AddSelector(IntPtr x, string sel, DelegateWithoutArguments func)
+ {
+ RegisterSelector (x, sel, func.Method.Name, (int) ParametersType.None);
+ }
+ public static void AddSelector(IntPtr x, string sel, DelegateFloat func)
+ {
+ RegisterSelector (x, sel, func.Method.Name, (int) ParametersType.Float);
+ }
+ public static void AddSelector(IntPtr x, string sel, DelegateString func)
+ {
+ RegisterSelector (x, sel, func.Method.Name, (int) ParametersType.Symbol);
+ }
+ public static void AddSelector(IntPtr x, string sel, DelegateArray func)
+ {
+ RegisterSelector (x, sel, func.Method.Name, (int) ParametersType.List);
+ }
+ public static void AddSelector(IntPtr x, DelegateWithoutArguments func)
+ {
+ RegisterSelector (x, "", func.Method.Name, (int) ParametersType.None);
+ }
+ public static void AddSelector(IntPtr x, DelegateFloat func)
+ {
+ RegisterSelector (x, "", func.Method.Name, (int) ParametersType.Float);
+ }
+ public static void AddSelector(IntPtr x, DelegateString func)
+ {
+ RegisterSelector (x, "", func.Method.Name, (int) ParametersType.Symbol);
+ }
+ public static void AddSelector(IntPtr x, DelegateArray func)
{
- RegisterSelector (x, sel, met, (int) type);
+ RegisterSelector (x, "", func.Method.Name, (int) ParametersType.List);
}
- // TODO
// send stuff to an outlet
[MethodImplAttribute (MethodImplOptions.InternalCall)]
private extern static void ToOutlet (IntPtr x, int outlet, int atoms_length, Atom [] atoms);
@@ -31,6 +63,25 @@ namespace PureData
atoms[0] = atom;
ToOutlet (x, outlet, atoms.Length, atoms);
}
+ public static void SendToOutlet (IntPtr x, int outlet, float f)
+ {
+ Atom [] atoms = new Atom[1];
+ atoms[0] = new Atom(f);
+ ToOutlet (x, outlet, atoms.Length, atoms);
+ }
+ public static void SendToOutlet (IntPtr x, int outlet, int i)
+ {
+ Atom [] atoms = new Atom[1];
+ atoms[0] = new Atom((float) i);
+ ToOutlet (x, outlet, atoms.Length, atoms);
+ }
+ public static void SendToOutlet (IntPtr x, int outlet, string s)
+ {
+ Atom [] atoms = new Atom[1];
+ atoms[0] = new Atom(s);
+ ToOutlet (x, outlet, atoms.Length, atoms);
+ }
+
// create an outlet
[MethodImplAttribute (MethodImplOptions.InternalCall)]
private extern static void CreateOutlet (IntPtr x, int type);
@@ -55,102 +106,9 @@ namespace PureData
[MethodImplAttribute (MethodImplOptions.InternalCall)]
public extern static void ErrorMessage (string message);
-
- /*
- // simplyfied atom
- typedef struct atom_simple atom_simple;
- typedef enum
- {
- A_S_NULL=0,
- A_S_FLOAT=1,
- A_S_SYMBOL=2,
- } t_atomtype_simple;
- typedef struct atom_simple
- {
- t_atomtype_simple a_type;
- union{
- float float_value;
- MonoString *string_value;
- } stuff;
- };
- */
}
- /*
- typedef float t_floatarg;
-
- typedef struct _symbol
- {
- char *s_name;
- struct _class **s_thing;
- struct _symbol *s_next;
- } t_symbol;
-
- EXTERN_STRUCT _array;
- #define t_array struct _array
-
-
-
- #define GP_NONE 0
- #define GP_GLIST 1
- #define GP_ARRAY 2
-
- typedef struct _gstub
- {
- union
- {
- struct _glist *gs_glist;
- struct _array *gs_array;
- } gs_un;
- int gs_which;
- int gs_refcount;
- } t_gstub;
-
- typedef struct _gpointer
- {
- union
- {
- struct _scalar *gp_scalar;
- union word *gp_w;
- } gp_un;
- int gp_valid;
- t_gstub *gp_stub;
- } t_gpointer;
-
- typedef union word
- {
- t_float w_float;
- t_symbol *w_symbol;
- t_gpointer *w_gpointer;
- t_array *w_array;
- struct _glist *w_list;
- int w_index;
- } t_word;
-
- typedef enum
- {
- A_NULL,
- A_FLOAT,
- A_SYMBOL,
- A_POINTER,
- A_SEMI,
- A_COMMA,
- A_DEFFLOAT,
- A_DEFSYM,
- A_DOLLAR,
- A_DOLLSYM,
- A_GIMME,
- A_CANT
- } t_atomtype;
-
- #define A_DEFSYMBOL A_DEFSYM
-
- typedef struct _atom
- {
- t_atomtype a_type;
- union word a_w;
- } t_atom;
- */
+
}