static SV * streamproccallback = (SV*)NULL; DWORD CALLBACK MyStreamProc(handle,buffer,length,user) HSTREAM handle; char *buffer; int length; DWORD user; { if (streamproccallback == (SV*)NULL) return 0; dSP ; int ret; SV * shandle; SV * sbuffer; SV * slength; SV * suser; ENTER; SAVETMPS; shandle = sv_2mortal(newSViv(handle)); sbuffer = sv_2mortal(newSVpv(buffer,length)); slength = sv_2mortal(newSViv(length)); suser = sv_2mortal(newSViv(user)); PUSHMARK(SP); XPUSHs(shandle); XPUSHs(sbuffer); XPUSHs(slength); XPUSHs(suser); PUTBACK; ret = call_sv(streamproccallback, G_SCALAR); buffer = SvPV(sbuffer,length); FREETMPS; LEAVE; return ret; }