Csound Csound-dev Csound-tekno Search About

[Cs-dev] Polymorphic opcode problem

Date2005-07-20 00:47
FromAndres Cabrera
Subject[Cs-dev] Polymorphic opcode problem
Hi,
I'm trying to make the following polymorphic opcodes, but it's not
working:
{"dssictls.kk",  sizeof(DSSICTLS), 3, "",  "iikk", (SUBR)dssictls_init, 
(SUBR)dssictlsk, 0 },
{"dssictls.ak",  sizeof(DSSICTLS), 5, "",  "iiak", (SUBR)dssictls_init,
0 , (SUBR)dssictlsa },

if I use the following line:
dssictls gihandle, p4, (kval*1), ktrig

I get:
error:  no legal opcode, line 57:
dssictls gihandle, p4, (kval*1), ktrig
1 syntax errors in orchestra.  compilation invalid

What am I missing to make the opcode polymorphic?

Thanks,
Andrés







-------------------------------------------------------
SF.Net email is sponsored by: Discover Easy Linux Migration Strategies
from IBM. Find simple to follow Roadmaps, straightforward articles,
informative Webcasts and more! Get everything you need to get up to
speed, fast. http://ads.osdn.com/?ad_idt77&alloc_id492&op=click
_______________________________________________
Csound-devel mailing list
Csound-devel@lists.sourceforge.net

Date2005-07-20 07:45
FromSteven Yi
SubjectRe: [Cs-dev] Polymorphic opcode problem
AttachmentsNone  

Date2005-07-20 10:51
FromIstvan Varga
SubjectRe: [Cs-dev] Polymorphic opcode problem
Andres Cabrera wrote:

> Hi,
> I'm trying to make the following polymorphic opcodes, but it's not
> working:
> {"dssictls.kk",  sizeof(DSSICTLS), 3, "",  "iikk", (SUBR)dssictls_init, 
> (SUBR)dssictlsk, 0 },
> {"dssictls.ak",  sizeof(DSSICTLS), 5, "",  "iiak", (SUBR)dssictls_init,
> 0 , (SUBR)dssictlsa },

You need to add a third entry that looks something like this:

{ "dssictls",  0xfffe },

Also, the two arguments on which the selection of the actual opcode is based
must be the first two, so you may want to change the syntax of the opcode to:

{"dssictls.kk",  sizeof(DSSICTLS), 3, "",  "kkii", (SUBR)dssictls_init,
(SUBR)dssictlsk, 0 },
{"dssictls.ak",  sizeof(DSSICTLS), 5, "",  "akii", (SUBR)dssictls_init,
0 , (SUBR)dssictlsa },

Alternatively, if you do want to have the original syntax, then set the
input types to "iixx":

{"dssictls",  sizeof(DSSICTLS), 7, "",  "iixx", (SUBR)dssictls_init,
(SUBR)dssictls_dummy, (SUBR)dssictls_dummy },

and then you can find out the actual type passed at init time
with the following:

int dssictls_dummy(ENVIRON *csound, DSSICTLS *p)
{
     csound->PerfError(csound, Str("dssictls: not initialised"));
}

int dssictls_kk(ENVIRON *csound, DSSICTLS *p);
int dssictls_ak(ENVIRON *csound, DSSICTLS *p);
int dssictls_ka(ENVIRON *csound, DSSICTLS *p);
int dssictls_aa(ENVIRON *csound, DSSICTLS *p);

int dssictls_init(ENVIRON *csound, DSSICTLS *p)
{
     switch ((int) csound->GetInputArgAMask(p) & 12) {
       case 0:  p->h.opadr = (SUBR) dssictls_kk;  /* "iikk" */
       case 4:  p->h.opadr = (SUBR) dssictls_ak;  /* "iiak" */
       case 8:  p->h.opadr = (SUBR) dssictls_ka;  /* "iika" */
       case 12: p->h.opadr = (SUBR) dssictls_aa;  /* "iiaa" */
     }
     /* ... */
}


-------------------------------------------------------
SF.Net email is sponsored by: Discover Easy Linux Migration Strategies
from IBM. Find simple to follow Roadmaps, straightforward articles,
informative Webcasts and more! Get everything you need to get up to
speed, fast. http://ads.osdn.com/?ad_id=7477&alloc_id=16492&op=click
_______________________________________________
Csound-devel mailing list
Csound-devel@lists.sourceforge.net

Date2005-07-20 11:22
FromSteven Yi
SubjectRe: [Cs-dev] Polymorphic opcode problem
AttachmentsNone  

Date2005-07-20 14:24
FromAndres Cabrera
SubjectRe: [Cs-dev] Polymorphic opcode problem
Excellent! Very clear, thanks very much.

Andres

On Wed, 2005-07-20 at 04:51, Istvan Varga wrote:
> Andres Cabrera wrote:
> 
> > Hi,
> > I'm trying to make the following polymorphic opcodes, but it's not
> > working:
> > {"dssictls.kk",  sizeof(DSSICTLS), 3, "",  "iikk", (SUBR)dssictls_init, 
> > (SUBR)dssictlsk, 0 },
> > {"dssictls.ak",  sizeof(DSSICTLS), 5, "",  "iiak", (SUBR)dssictls_init,
> > 0 , (SUBR)dssictlsa },
> 
> You need to add a third entry that looks something like this:
> 
> { "dssictls",  0xfffe },
> 
> Also, the two arguments on which the selection of the actual opcode is based
> must be the first two, so you may want to change the syntax of the opcode to:
> 
> {"dssictls.kk",  sizeof(DSSICTLS), 3, "",  "kkii", (SUBR)dssictls_init,
> (SUBR)dssictlsk, 0 },
> {"dssictls.ak",  sizeof(DSSICTLS), 5, "",  "akii", (SUBR)dssictls_init,
> 0 , (SUBR)dssictlsa },
> 
> Alternatively, if you do want to have the original syntax, then set the
> input types to "iixx":
> 
> {"dssictls",  sizeof(DSSICTLS), 7, "",  "iixx", (SUBR)dssictls_init,
> (SUBR)dssictls_dummy, (SUBR)dssictls_dummy },
> 
> and then you can find out the actual type passed at init time
> with the following:
> 
> int dssictls_dummy(ENVIRON *csound, DSSICTLS *p)
> {
>      csound->PerfError(csound, Str("dssictls: not initialised"));
> }
> 
> int dssictls_kk(ENVIRON *csound, DSSICTLS *p);
> int dssictls_ak(ENVIRON *csound, DSSICTLS *p);
> int dssictls_ka(ENVIRON *csound, DSSICTLS *p);
> int dssictls_aa(ENVIRON *csound, DSSICTLS *p);
> 
> int dssictls_init(ENVIRON *csound, DSSICTLS *p)
> {
>      switch ((int) csound->GetInputArgAMask(p) & 12) {
>        case 0:  p->h.opadr = (SUBR) dssictls_kk;  /* "iikk" */
>        case 4:  p->h.opadr = (SUBR) dssictls_ak;  /* "iiak" */
>        case 8:  p->h.opadr = (SUBR) dssictls_ka;  /* "iika" */
>        case 12: p->h.opadr = (SUBR) dssictls_aa;  /* "iiaa" */
>      }
>      /* ... */
> }
> 
> 
> -------------------------------------------------------
> SF.Net email is sponsored by: Discover Easy Linux Migration Strategies
> from IBM. Find simple to follow Roadmaps, straightforward articles,
> informative Webcasts and more! Get everything you need to get up to
> speed, fast. http://ads.osdn.com/?ad_id=7477&alloc_id=16492&op=click
> _______________________________________________
> Csound-devel mailing list
> Csound-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/csound-devel
> 
> 



-------------------------------------------------------
SF.Net email is sponsored by: Discover Easy Linux Migration Strategies
from IBM. Find simple to follow Roadmaps, straightforward articles,
informative Webcasts and more! Get everything you need to get up to
speed, fast. http://ads.osdn.com/?ad_id=7477&alloc_id=16492&op=click
_______________________________________________
Csound-devel mailing list
Csound-devel@lists.sourceforge.net