Exemple #1
0
static F2(jtpdtspvv){A x;D*av,s,t,*wv,z;I i,*u,*u0,*uu,*v,*v0,*vv;P*ap,*wp;
 RZ(a&&w);
 ap=PAV(a); x=SPA(ap,i); u=u0=AV(x); uu=u+AN(x); x=SPA(ap,x); av=DAV(x);
 wp=PAV(w); x=SPA(wp,i); v=v0=AV(x); vv=v+AN(x); x=SPA(wp,x); wv=DAV(x);
 z=0.0;
 NAN0;
 while(1){
  i=*u; while(i>*v&&v<vv)++v; if(v==vv)break;
  if(i==*v){s=av[u-u0]; t=wv[v-v0]; z+=s&&t?s*t:0; ++u; ++v; continue;}
  i=*v; while(i>*u&&u<uu)++u; if(u==uu)break;
  if(i==*u){s=av[u-u0]; t=wv[v-v0]; z+=s&&t?s*t:0; ++u; ++v; continue;}
 }
 NAN1;
 R scf(z);
}
Exemple #2
0
static F2(jtfitct){D d;V*sv;
 RZ(a&&w);
 ASSERT(!AR(w),EVRANK);
 sv=VAV(a);
 RZ(w=cvt(FL,w)); d=*DAV(w); ASSERT(0<=d&&d<5.82076609134675e-11,EVDOMAIN);
 R CDERIV(CFIT,jtfitct1,jtfitct2,sv->mr,sv->lr,sv->rr);
}
Exemple #3
0
static DF1(jtbasis1){DECLF;A z;D*x;I j;V*v;
 PREF1(jtbasis1);
 RZ(w=vi(w));
 switch(*AV(w)){
  case 0:
   GA(z,FL,3,1,0); x=DAV(z); v=VAV(fs);
   j=v->mr; x[0]=j<=-RMAX?-inf:j>=RMAX?inf:j;
   j=v->lr; x[1]=j<=-RMAX?-inf:j>=RMAX?inf:j;
   j=v->rr; x[2]=j<=-RMAX?-inf:j>=RMAX?inf:j;
   R pcvt(INT,z);
  case -1: R lrep(inv (fs));
  case  1: R lrep(iden(fs));
  default: ASSERT(0,EVDOMAIN);
}}
Exemple #4
0
A gfarray(D *d, I n) { A z; D *zv;
    z=ga(FLT,1,n,NULL);
    zv=DAV(z);
    DO(n, zv[i]=d[i]);
    R z;
}
Exemple #5
0
// convert a VARIANT to a J array
// returns 0 on error with detail in jerr.
static A v2a(J jt, VARIANT* v, int dobstrs)
{
	A a;
	SAFEARRAY* psa;
	SAFEARRAYBOUND* pb;
	I shape[MAXRANK];
	I k=1,n,r,i;
	I* pintsnk;
#if SY_64
	int* pint32src;
#else
	long long* pint64src;
#endif
	short* pshortsrc;
	unsigned short* pboolsrc;
	char* pboolsnk;
	VARTYPE t;
	int byref;
	double* pdoublesnk;
	float* pfloatsrc;

#define OPTREF(v,field)		(byref ? *v->p##field : v->field)

	t=v->vt;
	byref = t & VT_BYREF;
	t = t & ~VT_BYREF;

	if(dobstrs && t == VT_BSTR)
	{
		BSTR bstr; int len;

		bstr = OPTREF(v,bstrVal);

		if(uniflag)
			// len=SysStringLen(bstr);
      len=WideCharToMultiByte(CP_UTF8,0,bstr,(int)SysStringLen(bstr),0,0,0,0);
		else
			len=SysStringByteLen(bstr);
		RE(a=ga(LIT, len, 1, 0));
		if(uniflag)
			toutf8n(bstr, (C*)AV(a), len);
		else
			memcpy((C*)AV(a), (C*)bstr, len);
		R a;
	}
	if(t & VT_ARRAY)
	{
		psa = OPTREF(v,parray);
		pb = psa->rgsabound;
		r=psa->cDims;
		ASSERT(r<=MAXRANK,EVRANK);
		for(i=0; i<r; ++i)
		{
			n = pb[i].cElements;
			shape[i] = n; 
			k *= n;
		}
	}
	else
		r = 0;

	switch(t)
	{
	case VT_VARIANT | VT_ARRAY:
	{
		A *boxes;
		VARIANT* pv;
		
		// fixup scalar boxes which arrive
		// as a 1-elem vector with a lower bound at -1, not 0.
		if (pb[0].lLbound == -1)
		{
			ASSERT(psa->cDims==1 && pb[0].cElements==1, EVDOMAIN);
			r = 0;
		}
		RE(a=ga(BOX, k, r, (I*)&shape));
		ASSERT(S_OK==SafeArrayAccessData(psa, &pv),EVFACE);
		boxes = AAV(a);
		while(k--)
		{
			A z;
			// Don't use a PROLOG/EPILOG during v2a.
			// The z's are not getting their reference
			// count set until everything is in place
			// and the jset() is done in Jset().
			z = *boxes++ = v2a(jt, pv++, dobstrs);
			if (!z) break;
		}
		SafeArrayUnaccessData(psa);
		if (jt->jerr) return 0;
		break;
	}
	case VT_BOOL | VT_ARRAY:
		RE(a=ga(B01, k, r, (I*)&shape));
		pboolsrc = (VARIANT_BOOL*)psa->pvData;
		pboolsnk = BAV(a);
		// J bool returned from VB boolean, a -1 and 0 mess.
		// It wouldn't be that bad if the Microsoft folks used their own macros
		// and kept an eye an sign extensions.  But the way they are
		// doing it they are returning at least some TRUEs as value 255
		// instead of VARIANT_TRUE.  Therefore, we have to compare against
		// VARIANT_FALSE which -we hope- is consistently defined (as 0).
		while(k--)
			*pboolsnk++ = (*pboolsrc++)!=VARIANT_FALSE;
		break;

	case VT_UI1 | VT_ARRAY:
		RE(a=ga(LIT, k, r, (I*)&shape));
		memcpy(AV(a), psa->pvData, k * sizeof(char));
		break;

	case VT_UI2 | VT_ARRAY:
		RE(a=ga(C2T, k, r, (I*)&shape));
		memcpy(AV(a), psa->pvData, k * sizeof(short));
		break;

	case VT_UI4 | VT_ARRAY:
		RE(a=ga(C4T, k, r, (I*)&shape));
		memcpy(AV(a), psa->pvData, k * sizeof(int));
		break;

	case VT_I2 | VT_ARRAY:
		RE(a=ga(INT, k, r, (I*)&shape));
		pshortsrc = (short*)psa->pvData;
		pintsnk = AV(a);
		while(k--)
			*pintsnk++ = *pshortsrc++;
		break;

	case VT_I4 | VT_ARRAY:
		RE(a=ga(INT, k, r, (I*)&shape));
#if SY_64
		pint32src = (long*)psa->pvData;
		pintsnk = AV(a);
		while(k--)
			*pintsnk++ = *pint32src++;
#else
		memcpy(AV(a), psa->pvData, k * sizeof(int));
#endif
		break;

	case VT_I8 | VT_ARRAY:
		RE(a=ga(INT, k, r, (I*)&shape));
#if SY_64
		memcpy(AV(a), psa->pvData, k * sizeof(I));
#else
		pint64src = (long long*)psa->pvData;
		pintsnk = AV(a);
		while(k--)
			*pintsnk++ = (I)*pint64src++;
#endif
		break;

	case VT_R4 | VT_ARRAY:
		RE(a=ga(FL, k, r, (I*)&shape));
		pfloatsrc = (float*)psa->pvData;
		pdoublesnk = (double*)AV(a);
		while(k--)
			*pdoublesnk++ = *pfloatsrc++;
		break;

	case VT_R8 | VT_ARRAY:
		RE(a=ga(FL, k, r, (I*)&shape));
		memcpy(AV(a), psa->pvData, k * sizeof(double));
		break;

	case VT_UI1:
		RE(a=ga(LIT, 1, 0, 0));
		*CAV(a) = OPTREF(v,bVal);
		break;

	case VT_UI2:
		RE(a=ga(C2T, 1, 0, 0));
		*USAV(a) = (US)OPTREF(v,iVal);
		break;

	case VT_UI4:
		RE(a=ga(C4T, 1, 0, 0));
		*C4AV(a) = (C4)OPTREF(v,lVal);
		break;

	case VT_BOOL:
		RE(a=ga(B01, 1, 0, 0));
		// array case above explains this messy phrase:
		*BAV(a) = OPTREF(v,boolVal)!=VARIANT_FALSE;
		break;

	case VT_I2:
		RE(a=ga(INT, 1, 0, 0));
		*IAV(a) = OPTREF(v,iVal);
		break;

	case VT_I4:
		RE(a=ga(INT, 1, 0, 0));
		*IAV(a) = OPTREF(v,lVal);
		break;

	case VT_I8:
		RE(a=ga(INT, 1, 0, 0));
		*IAV(a) = (I)OPTREF(v,llVal);
		break;

	case VT_R4:
		RE(a=ga(FL, 1, 0, 0));
		*DAV(a) = OPTREF(v,fltVal);
		break;

	case VT_R8:
		RE(a=ga(FL, 1, 0, 0));
		*DAV(a) = OPTREF(v,dblVal);
		break;

	default:
		ASSERT(0,EVDOMAIN);
	}
	if(1<r && jt->transposeflag)
	{
		RE(a=cant1(a));
		DO(r, AS(a)[i]=shape[r-1-i];);
Exemple #6
0
/*
** set_tag_arg
**
** parse & set one single tag argument
**
*/
static BOOL set_tag_arg( HSCPRC *hp, DLLIST *varlist, STRPTR varname )
{
    HSCATTR *var = find_varname( varlist, varname );
    INFILE *inpf = hp->inpf;
    STRPTR  arg = NULL;
    BOOL    ok  = FALSE;
    STRPTR  nw;
    HSCATTR  skipvar;                   /* dummy attribute to skip unkown */
    EXPSTR *attr_str = init_estr( 40 ); /* string for attribute name */
    EXPSTR *val_str  = init_estr( 40 ); /* string for "=" and value */

    DAV( fprintf( stderr, DHL "   set attr %s\n", varname ) );

    /* append attribute name to attr_str */
    app_estr( attr_str, infgetcws( inpf ) );
    app_estr( attr_str, infgetcw( inpf ) );

    if ( !var ) {                      /* attribute not found */

        /* assign to pseudo-attribute */
        var = &skipvar;
        var->name = varname;
        var->deftext = NULL;
        var->text    = NULL;
        var->enumstr = NULL;
        var->vartype = VT_STRING;
        var->varflag = 0;

        /* message: unknown attribute */
        hsc_msg_unkn_attr( hp, varname );

    }

    /* get argument */
    nw  = infgetw( inpf );
    if ( nw )
        if ( !strcmp( nw, "=" ) ) {

            /* append "=" to log */
            app_estr( val_str, infgetcws( inpf ) );
            app_estr( val_str, infgetcw( inpf ) );

            /* parse expression */
            arg = eval_expression( hp, var, NULL );

            /* append value to log */
            if ( var->quote != VQ_NO_QUOTE )
                app_estrch( val_str, var->quote );
            if ( get_vartext( var ) )
                app_estr( val_str, get_vartext( var ) );
            if ( var->quote != VQ_NO_QUOTE )
                app_estrch( val_str, var->quote );

            if ( arg ) {

                DAV( fprintf( stderr, DHL "  `%s'\n", arg ) );
                ok = TRUE;

            }

        } else {

            arg = NULL;
            inungetcwws( inpf );
            ok = TRUE;

        }
    else
        hsc_msg_eof( hp, "read attribute value" );

    if ( ok )
        if ( arg ) {

            if ( var->vartype == VT_BOOL ) {

                /* set boolean attribute depending on expression */
                set_vartext_bool( var, get_varbool( var ) );

                /* if the expression returned FALSE, remove
                ** the boolean  switch from the call
                */
                if ( !get_varbool( var ) )
                    clr_estr( attr_str );

            } else
                /* append value to attribute string */
                app_estr( attr_str, estr2str( val_str ) );

        } else {

            /* no value has been passed to the attribute */
            if ( var->vartype == VT_BOOL ) {

                /* for boolean attributes, this is legal,
                ** and enables the attribute
                */
                set_vartext_bool( var, TRUE );

            } else {

                /* for non-boolean attributes, display
                ** error message
                */
                hsc_message( hp, MSG_NOARG_ATTR,
                             "missing value for %A", var );

            }
        }

#if 0
    if ( arg ) {


        if ( var->vartype == VT_BOOL ) {

            message( MSG_ARG_BOOL_ATTR, inpf );
            errstr( "value for boolean" );
            errsym( var->name );
            errlf();

        }
    } else {

        if ( var->vartype == VT_BOOL ) {

            /* set boolean attribute */
            DAV( fprintf( stderr, " (bool)\n", var->name ) );
            set_vartext( var, var->name );
            var->quote = VQ_NO_QUOTE;

        } else {


        }
    }
#endif

    /* cleanup pseudo-attr */
    if ( var == &skipvar )
        clr_vartext( var );

    /* append & cleanup attribute and value string */
    app_estr( hp->tag_attr_str, estr2str( attr_str ) );
    del_estr( attr_str );
    del_estr( val_str );

    return( ok );
}
Exemple #7
0
static DF2(jtfitct2){DECLFG;A z;D old=jt->ct; jt->ct=*DAV(gs); z=CALL2(f2,a,w,fs); jt->ct=old; R z;}
Exemple #8
0
static DF1(jtfitct1){DECLFG;A z;D old=jt->ct; jt->ct=*DAV(gs); z=CALL1(f1,  w,fs); jt->ct=old; R z;}