void ex_mref( PVal *pval, int prm ) { int t,size; void *ptr; const int GETBM=0x60; t = HSPVAR_FLAG_INT; size = 4; if ( prm >= GETBM ) { throw HSPERR_UNSUPPORTED_FUNCTION; } else { switch( prm ) { case 0x40: ptr = &ctx->stat; break; case 0x41: ptr = ctx->refstr; t = HSPVAR_FLAG_STR; size = 1024; break; case 0x44: ptr = ctx; size = sizeof(HSPCTX); break; default: throw HSPERR_UNSUPPORTED_FUNCTION; } } HspVarCoreDupPtr( pval, t, ptr, size ); }
void HspVarCoreDup( PVal *pval, PVal *arg, APTR aptr ) { // 指定された変数のクローンになる // int size; PDAT *buf; HspVarProc *p; p = &hspvarproc[ arg->flag ]; buf = HspVarCorePtrAPTR( arg, aptr ); HspVarCoreGetBlockSize( arg, buf, &size ); HspVarCoreDupPtr( pval, arg->flag, buf, size ); }