static B jtspsscell(J jt,A w,I wf,I wcr,A*zc,A*zt){A c,t,y;B b; I cn,*cv,j,k,m,n,p,*s,tn,*tv,*u,*u0,*v,*v0;P*wp; wp=PAV(w); s=AS(w); p=3+s[wf]; y=SPA(wp,i); s=AS(y); m=s[0]; n=s[1]; u0=AV(y); u=u0+n; v0=u0+wf; v=v0+n; if(!m){*zt=*zc=mtv; R 1;} GATV(t,INT,2+2*m,1,0); tv=AV(t); tv[0]=tv[1]=0; tn=2; GATV(c,INT, 2*m,2,0); cv=AV(c); cv[0]=0; cn=0; *(1+AS(c))=2; for(j=1;j<m;++j){ b=1; for(k=0;k<wf;++k) if(u0[k]!=u[k]){ tv[tn++]=j; tv[tn++]=j; cv[1+cn]=tn-cv[cn]; if(p==tn-cv[cn]){++cv[cn]; cv[1+cn]-=2;} cn+=2; cv[cn]=tn-2; u0=u; v0=v; b=0; break; } if(b&&*v0!=*v){tv[tn++]=j; v0=v;} u+=n; v+=n; } tv[tn++]=m; tv[tn++]=m; cv[1+cn]=tn-cv[cn]; if(p==tn-cv[cn]){++cv[cn]; cv[1+cn]-=2;} cn+=2; AN(t)= *AS(t)=tn; *zt=t; /* cell divisions (row indices in y) */ AN(c)=cn; *AS(c)=cn/2; *zc=c; /* item divisions (indices in t, # of elements) */ R 1; } /* frame: all sparse; cell: 1 or more sparse, then dense */
static REPF(jtrepzsx) { A q,x,y; I c,d,j,k=-1,m,p=0,*qv,*xv,*yv; P*ap; RZ(a&&w); ap=PAV(a); x=SPA(ap,x); m=AN(x); if(!AN(SPA(ap,a)))R repzdx(ravel(x),w,wf,wcr); y=SPA(ap,i); yv=AV(y); RZ(x=cvt(INT,vec(FL,2*m,AV(x)))); xv=AV(x); if(equ(zero,SPA(ap,e))) { k=c=*(wf+AS(w)); if(!wf&&SPARSE&AT(w)) { A a,y; I m,n,q,*v; P*wp; wp=PAV(w); a=SPA(wp,a); if(AN(a)&&!*AV(a)) { y=SPA(wp,i); v=AS(y); m=v[0]; n=v[1]; v=AV(y); k=m?v[(m-1)*n]+1:0; q=0; DO(m, if(q==*v)++q; else if(q<*v) { k=q; break; } v+=n;); }
static F2(jtpdtspmv){A ax,b,g,x,wx,y,yi,yj,z;B*bv;I m,n,s[2],*u,*v,*yv;P*ap,*wp,*zp; RZ(a&&w); ap=PAV(a); y=SPA(ap,i); yv=AV(y); s[0]=n=*AS(y); s[1]=1; GATV(yj,INT,n,2,s); if(DENSE&AT(w)){ GATV(yi,INT,n,2,s); u=AV(yi); AR(yj)=1; v=AV(yj); DO(n, *u++=*yv++; *v++=*yv++;);
AFFEND AFFDEF(arc_tell) { AARG(fp); AFBEGIN; AFTCALL(VINDEX(IO(AV(fp))->io_ops, IO_tell), AV(fp)); AFEND; }
static B jtixin(J jt,A w,I s,I*i,I*n){A in,*wv;I j,k,m,*u,wd; if(AT(w)&BOX){wv=AAV(w); wd=(I)w*ARELATIVE(w); RZ(in=vi(WVR(1))); k=AN(in); u=AV(in);} else{in=w; k=AN(in)-1; u=1+AV(in);} ASSERT(1>=AR(in),EVRANK); ASSERT(k&&k<=(n?2:1),EVLENGTH); j=u[0]; j=0>j?s+j:j; m=1==k?s-j:u[1]; ASSERT(0<=j&&(!n||j<s&&j+m<=s&&0<=m),EVINDEX); *i=j; if(n)*n=m; R 1; } /* process index file arg for index and length */
F1(bool){A b,h;I j,*v; RZ(w); if(VERB&AT(w))R ADERIV(CBOOL, basis1,0L, 0L,0L,0L); RZ(w=vi(w)); v=AV(w); DO(AN(w), j=*v++; ASSERT(-16<=j&&j<16,EVINDEX)); GA(b,BOOL,64,2,0); *AS(b)=16; *(1+AS(b))=4; MC(AV(b),booltab,64L); RZ(h=cant2(apv(AR(w),0L,1L),from(w,b))); R fdef(CBOOL,VERB, bool1,bool2, w,0L,h, 0L, RMAXL,0L,0L); }
static AFFDEF(clos_pprint) { AARG(sexpr, disp, fp); AOARG(visithash); AFBEGIN; AFTCALL(arc_mkaff(c, __arc_disp_write, CNIL), CLOS_CODE(AV(sexpr)), AV(disp), AV(fp), AV(visithash)); AFEND; }
AFFEND AFFDEF(arc_write) { AARG(arg); AOARG(outport); AFBEGIN; AFTCALL(arc_mkaff(c, __arc_disp_write, CNIL), AV(arg), CNIL, AV(outport)); AFEND; }
static AFFDEF(symbol_pprint) { AARG(sexpr, disp, fp); AOARG(visithash); AFBEGIN; (void)visithash; (void)disp; AFTCALL(arc_mkaff(c, arc_disp, CNIL), arc_sym2name(c, AV(sexpr)), AV(fp)); AFEND; }
AFFEND static AFFDEF(fio_seek) { AARG(fio, offset, whence); AFBEGIN; if (!(FIX2INT(AV(whence)) == SEEK_SET || FIX2INT(AV(whence)) == SEEK_CUR || FIX2INT(AV(whence)) == SEEK_END)) { arc_err_cstrfmt(c, "invalid seek whence argument"); ARETURN(CNIL); } #ifdef HAVE_FSEEKO { long long noff; if (__arc_val2ll(c, AV(offset), &noff)) { ARETURN(INT2FIX(fseeko(FIODATA(AV(fio))->fp, (off_t)noff, FIX2INT(AV(whence))))); } else { arc_err_cstrfmt(c, "invalid seek offset"); } } #else { long noff; if (__arc_val2long(c, AV(offset), &noff)) { ARETURN(INT2FIX(fseek(FIODATA(AV(fio))->fp, noff, FIX2INT(AV(whence))))); } else { arc_err_cstrfmt(c, "invalid seek offset"); } } #endif AFEND; }
B jtsymext(J jt,B b){A x,y;I j,m,n,s[2],*v,xn,yn;L*u; if(b){y=jt->symp; j=((MS*)y-1)->j; n=*AS(y); yn=AN(y);} else { j=12; n=1; yn=0; } m=msize[1+j]; /* new size in bytes */ m-=sizeof(MS)+SZI*(AH+2); /* less array overhead */ m/=symcol*SZI; /* new # rows */ s[0]=m; s[1]=symcol; xn=m*symcol; /* new pool array shape */ GA(x,INT,xn,2,s); v=AV(x); /* new pool array */ if(b)ICPY(v,AV(y),yn); /* copy old data to new array */ memset(v+yn,C0,SZI*(xn-yn)); /* 0 unused area for safety */ u=n+(L*)v; j=1+n; DO(m-n-1, u++->next=j++;); /* build free list extension */
AFFEND static AFFDEF(xhash_apply) { AARG(tbl, key, dflt); AFBEGIN; AFCALL(arc_mkaff(c, arc_xhash_lookup, CNIL), AV(tbl), AV(key)); if (BOUND_P(AFCRV)) ARETURN(AFCRV); ARETURN(AV(dflt)); AFEND; }
AFFEND AFFDEF(arc_close) { ARARG(list); AFBEGIN; for (; !NIL_P(AV(list)); WV(list, cdr(AV(list)))) { AFCALL(VINDEX(IO(car(AV(list)))->io_ops, IO_close), car(AV(list))); } ARETURN(CNIL); AFEND; }
AFFEND static AFFDEF(fio_close) { AARG(fio); AFBEGIN; if (FIODATA(AV(fio))->closed == 0) { fclose(FIODATA(AV(fio))->fp); FIODATA(AV(fio))->closed = 1; } ARETURN(CNIL); AFEND; }
AFFEND static AFFDEF(fio_putb) { AARG(fio, byte); int rv; AFBEGIN; rv = fputc(FIX2INT(AV(byte)), FIODATA(AV(fio))->fp); if (rv < 0) ARETURN(CNIL); ARETURN(AV(byte)); AFEND; }
AFFEND AFFDEF(arc_writeb) { AARG(byte); AOARG(fd); AFBEGIN; if (arc_thr_argc(c, thr) == 0) { arc_err_cstrfmt(c, "writeb: too few arguments"); return(CNIL); } if (!BOUND_P(AV(fd))) STDOUT(fd); IOW_TYPECHECK(AV(fd)); CHECK_CLOSED(AV(fd)); AFCALL(VINDEX(IO(AV(fd))->io_ops, IO_wready), AV(fd)); if (AFCRV == CNIL) { arc_err_cstrfmt(c, "port is not ready for writing"); ARETURN(CNIL); } AFTCALL(VINDEX(IO(AV(fd))->io_ops, IO_putb), AV(fd), AV(byte)); AFEND; }
pj_status_t pjmedia_format_id_to_PixelFormat(pjmedia_format_id fmt_id, enum AVPixelFormat *pixel_format) { unsigned i; for (i=0; i<PJ_ARRAY_SIZE(ffmpeg_fmt_table); ++i) { const struct ffmpeg_fmt_table_t *t = &ffmpeg_fmt_table[i]; if (t->id==fmt_id && t->pf != AV(PIX_FMT_NONE)) { *pixel_format = t->pf; return PJ_SUCCESS; } } *pixel_format = AV(PIX_FMT_NONE); return PJ_ENOTFOUND; }
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); }
AFFEND AFFDEF(arc_peekc) { AOARG(fd); AVAR(ch); AFBEGIN; if (!BOUND_P(AV(fd))) STDIN(fd); AFCALL(arc_mkaff(c, arc_readc, CNIL), AV(fd)); WV(ch, AFCRV); arc_ungetc_rune(c, arc_char2rune(c, AV(ch)), AV(fd)); ARETURN(AV(ch)); AFEND; }
pj_status_t pjmedia_format_id_to_CodecID(pjmedia_format_id fmt_id, unsigned *codec_id) { unsigned i; for (i=0; i<PJ_ARRAY_SIZE(ffmpeg_codec_table); ++i) { const struct ffmpeg_codec_table_t *t = &ffmpeg_codec_table[i]; if (t->id==fmt_id && t->codec_id != AV(PIX_FMT_NONE)) { *codec_id = t->codec_id; return PJ_SUCCESS; } } *codec_id = (unsigned)AV(PIX_FMT_NONE); return PJ_ENOTFOUND; }
static AFFDEF(fio_closed_p) { AARG(fio); AFBEGIN; ARETURN((FIODATA(AV(fio))->closed) ? CTRUE : CNIL); AFEND; }
static DF1(case1){A u;V*sv; PREF1(case1); sv=VAV(self); RZ(u=from(df1(w,sv->g),sv->h)); ASSERT(!AR(u),EVRANK); R df1(w,*AV(u)); }
static F1(jtvtokens){A t,*y,z;I n,*s;TA*x; RZ(t=tokens(vs(w))); n=AN(t); y=AAV(t); jt->tmonad=1; GA(z,BOX,WTA*(5+n),2,0); s=AS(z); *s++=5+n; *s=WTA; x=(TA*)AV(z); x->a=mark; x->t=0; ++x; DO(n, x->a=t=*y++; x->t=0; ++x; if(t==xnam||jt->dotnames&&t==xdot)jt->tmonad=0;);
static A jtmerge1(J jt,A w,A ind){A z;B*b;C*wc,*zc;D*wd,*zd;I c,it,j,k,m,r,*s,t,*u,*wi,*zi; RZ(w&&ind); r=MAX(0,AR(w)-1); s=1+AS(w); t=AT(w); k=bp(t); m=IC(w); c=aii(w); ASSERT(!(t&SPARSE),EVNONCE); ASSERT(r==AR(ind),EVRANK); ASSERT(!ICMP(s,AS(ind),r),EVLENGTH); GA(z,t,c,r,s); if(!(AT(ind)&B01+INT))RZ(ind=cvt(INT,ind)); it=AT(ind); u=AV(ind); b=(B*)u; ASSERT(!c||1<m||!(it&B01),EVINDEX); ASSERT(!c||1!=m||!memchr(b,C1,c),EVINDEX); zi=AV(z); zc=(C*)zi; zd=(D*)zc; wi=AV(w); wc=(C*)wi; wd=(D*)wc; switch(MCASE(it,k)){ case MCASE(B01,sizeof(C)): DO(c, *zc++=wc[*b++?i+c:i];); break; case MCASE(B01,sizeof(I)): DO(c, *zi++=wi[*b++?i+c:i];); break;
static DF2(case2){A u;V*sv; PREF2(case2); sv=VAV(self); RZ(u=from(df2(a,w,sv->g),sv->h)); ASSERT(!AR(u),EVRANK); R df2(a,w,*AV(u)); }
static void jsig(void){ tostdout=1; suspend=1; if(debugb&&!spc()){ dhead(); jputs("ws full (can not debug suspend)"); jputc(CNL); debugb=0; } dhead(); jputs(AV(*(jerr+AAV(qevm)))); jputc(CNL); }
AFFEND static AFFDEF(symbol_xcoerce) { AARG(obj, stype, arg); AFBEGIN; (void)arg; if (FIX2INT(AV(stype)) == T_SYMBOL) ARETURN(AV(obj)); if (FIX2INT(AV(stype)) == T_STRING) ARETURN(arc_sym2name(c, AV(obj))); arc_err_cstrfmt(c, "cannot coerce"); ARETURN(CNIL); AFEND; }
static A jtcants(J jt,A a,A w,A z){A a1,q,y;B*b,*c;I*u,wr,zr;P*wp,*zp; RZ(a&&w&&z); RZ(a=grade1(a)); wr=AR(w); wp=PAV(w); a1=SPA(wp,a); zr=AR(z); zp=PAV(z); ASSERT(wr==zr,EVNONCE); RZ(b=bfi(wr,a1,1)); GA(q,B01,wr,1,0); c=BAV(q); u=AV(a); DO(wr, c[i]=b[u[i]];);
static A jtvaspc(J jt,A a,A w,C id,VF ado,I cv,I t,I zt,I af,I acr,I wf,I wcr,I f,I r){A q;I*as,*v,*ws; as=AS(a); ws=AS(w); GA(q,INT,f+r,1,0); v=AV(q); if(r>acr){ICPY(v,wf+ws,r); RZ(a=irs2(vec(INT,r-acr,acr+v),a,0L,1L,0L,jtreshape));} if(r>wcr){ICPY(v,af+as,r); RZ(w=irs2(vec(INT,r-wcr,wcr+v),w,0L,1L,0L,jtreshape));} R vasp(a,w,id,ado,cv,t,zt,af,r,wf,r,f,r); } /* prefix agreement on cells */
static AFFDEF(fio_ready) { AARG(fio); FILE *fp; fd_set rfds; int retval, check; struct timeval tv; AFBEGIN; if (TYPE(AV(fio)) == T_OUTPORT) ARETURN(CNIL); for (;;) { fp = FIODATA(AV(fio))->fp; /* XXX - NOT PORTABLE! */ #ifdef _IO_fpos_t check = (fp->_IO_read_ptr != fp->_IO_read_end); #else check = (fp->_gptr < (fp)->_egptr); #endif if (check) ARETURN(CTRUE); /* No buffered data available. See if the underlying file descriptor is readable. */ FD_ZERO(&rfds); FD_SET(fileno(fp), &rfds); tv.tv_usec = tv.tv_sec = 0; retval = select(fileno(fp)+1, &rfds, NULL, NULL, &tv); if (retval == -1) { int en = errno; arc_err_cstrfmt(c, "error checking file descriptor (%s; errno=%d)", strerror(en), en); ARETURN(CNIL); } if (FD_ISSET(fileno(fp), &rfds)) ARETURN(CTRUE); /* We have to wait */ AIOWAITR(fileno(fp)); } ARETURN(CNIL); AFEND; }