From af0a9de91583557786cdfeca37c36b8e5656fb23 Mon Sep 17 00:00:00 2001 From: Davide Morelli Date: Sat, 14 Jan 2006 02:34:17 +0000 Subject: outlet ready, multi-instance, split assembly in 2 svn path=/trunk/externals/clr/; revision=4401 --- pd/AssemblyInfo.cs | 58 ++++++++++++++++++++ pd/Atom.cs | 28 ++++++++++ pd/pd.cs | 151 +++++++++++++++++++++++++++++++++++++++++++++++++++++ pd/pd.csproj | 105 +++++++++++++++++++++++++++++++++++++ pd/pd.sln | 21 ++++++++ 5 files changed, 363 insertions(+) create mode 100755 pd/AssemblyInfo.cs create mode 100755 pd/Atom.cs create mode 100755 pd/pd.cs create mode 100755 pd/pd.csproj create mode 100755 pd/pd.sln (limited to 'pd') diff --git a/pd/AssemblyInfo.cs b/pd/AssemblyInfo.cs new file mode 100755 index 0000000..74d5e94 --- /dev/null +++ b/pd/AssemblyInfo.cs @@ -0,0 +1,58 @@ +using System.Reflection; +using System.Runtime.CompilerServices; + +// +// Le informazioni generali relative a un assembly sono controllate dal seguente +// insieme di attributi. Per modificare le informazioni associate a un assembly +// occorre quindi modificare i valori di questi attributi. +// +[assembly: AssemblyTitle("PureData")] +[assembly: AssemblyDescription("bridge between C sharp externals and pd")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("")] +[assembly: AssemblyCopyright("Davide Morelli")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// +// Le informazioni sulla versione di un assembly sono costituite dai seguenti quattro valori: +// +// Numero di versione principale +// Numero di versione secondario +// Numero revisione +// Numero build +// +// È possibile specificare tutti i valori o impostare come predefiniti i valori Numero revisione e Numero build +// utilizzando l'asterisco (*) come illustrato di seguito: + +[assembly: AssemblyVersion("1.0.*")] + +// +// Per firmare l'assembly è necessario specificare una chiave da utilizzare. +// Fare riferimento alla documentazione di Microsoft .NET Framework per ulteriori informazioni sulla firma degli assembly. +// +// Utilizzare gli attributi elencati di seguito per verificare la chiave utilizzata per la firma. +// +// Note: +// (*) Se non è specificata alcuna chiave, non sarà possibile firmare l'assembly. +// (*) KeyName fa riferimento a una chiave installata nel provider di servizi di +// crittografia (CSP) sul computer in uso. KeyFile fa riferimento a un file che contiene +// una chiave. +// (*) Se entrambi i valori KeyFile e KeyName sono specificati, si +// verificherà il seguente processo: +// (1) Se KeyName è presente in CSP, verrà utilizzata tale chiave. +// (2) Se KeyName non esiste e KeyFile esiste, la chiave +// di KeyFile verrà installata nel CSP e utilizzata. +// (*) Per creare un KeyFile, è possibile utilizzare l'utilità sn.exe (Strong Name). +// Quando si specifica il KeyFile, il percorso dovrà essere +// relativo alla directory di output del progetto, ovvero +// %Project Directory%\obj\. Se ad esempio il KeyFile si +// trova nella directory del progetto, occorre specificare l'attributo AssemblyKeyFile +// come [assembly: AssemblyKeyFile("..\\..\\mykey.snk")] +// (*) La firma ritardata è un'opzione avanzata. Vedere la documentazione di Microsoft +// .NET Framework per ulteriori informazioni. +// +[assembly: AssemblyDelaySign(false)] +[assembly: AssemblyKeyFile("")] +[assembly: AssemblyKeyName("")] diff --git a/pd/Atom.cs b/pd/Atom.cs new file mode 100755 index 0000000..7e0affa --- /dev/null +++ b/pd/Atom.cs @@ -0,0 +1,28 @@ +using System; +using System.Runtime.InteropServices; // for structures + +namespace PureData +{ + public enum AtomType {Null = 0, Float=1, Symbol=2, List=3, Bang=4}; + + //[StructLayout (LayoutKind.Explicit)] + [StructLayout (LayoutKind.Sequential)] + public struct Atom + { + public AtomType type; + public float float_value; + public string string_value; + public Atom(float f) + { + this.type = AtomType.Float; + this.float_value = f; + this.string_value = "float"; + } + public Atom(string s) + { + this.type = AtomType.Symbol; + this.float_value = 0; + this.string_value = s; + } + } +} \ No newline at end of file diff --git a/pd/pd.cs b/pd/pd.cs new file mode 100755 index 0000000..a94b9f1 --- /dev/null +++ b/pd/pd.cs @@ -0,0 +1,151 @@ +using System; +using System.Runtime.CompilerServices; // for extern import + + + +namespace PureData +{ + public enum ParametersType {None = 0, Float=1, Symbol=2, List=3, Bang=4}; + + public class pd + { + [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) + { + RegisterSelector (x, sel, met, (int) type); + } + + // TODO + // send stuff to an outlet + [MethodImplAttribute (MethodImplOptions.InternalCall)] + private extern static void ToOutlet (IntPtr x, int outlet, int atoms_length, Atom [] atoms); + public static void SendToOutlet (IntPtr x, int outlet, Atom [] atoms) + { + ToOutlet (x, outlet, atoms.Length, atoms); + } + + // create an outlet + [MethodImplAttribute (MethodImplOptions.InternalCall)] + private extern static void CreateOutlet (IntPtr x, int type); + // function called by the user + public static void AddOutlet(IntPtr x, ParametersType type) + { + CreateOutlet (x, (int) type); + } + + // create an inlet + [MethodImplAttribute (MethodImplOptions.InternalCall)] + private extern static void CreateInlet (IntPtr x, string selector, int type); + // function called by the user + public static void AddInlet(IntPtr x, string selector, ParametersType type) + { + CreateInlet (x, selector, (int) type); + } + + [MethodImplAttribute (MethodImplOptions.InternalCall)] + public extern static void PostMessage (string message); + + [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; + */ + +} diff --git a/pd/pd.csproj b/pd/pd.csproj new file mode 100755 index 0000000..915ac50 --- /dev/null +++ b/pd/pd.csproj @@ -0,0 +1,105 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pd/pd.sln b/pd/pd.sln new file mode 100755 index 0000000..2d4a44b --- /dev/null +++ b/pd/pd.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "pd", "pd.csproj", "{FFBC9D2E-1FB7-4E82-B5DC-46B31F8A58A2}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {FFBC9D2E-1FB7-4E82-B5DC-46B31F8A58A2}.Debug.ActiveCfg = Debug|.NET + {FFBC9D2E-1FB7-4E82-B5DC-46B31F8A58A2}.Debug.Build.0 = Debug|.NET + {FFBC9D2E-1FB7-4E82-B5DC-46B31F8A58A2}.Release.ActiveCfg = Release|.NET + {FFBC9D2E-1FB7-4E82-B5DC-46B31F8A58A2}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal -- cgit v1.2.1