/* $OpenXM: OpenXM_contrib2/asir2000/builtin/result.c,v 1.1 1999/12/03 07:39:07 noro Exp $ */
#include "ca.h"
#include "parse.h"
void Presult(), Psrcr();
struct ftab result_tab[] = {
{"res",Presult,-4},
{"srcr",Psrcr,3},
{0,0,0},
};
void Presult(arg,rp)
NODE arg;
P *rp;
{
int mod;
P p1,p2,r;
asir_assert(ARG0(arg),O_P,"res");
asir_assert(ARG1(arg),O_P,"res");
asir_assert(ARG2(arg),O_P,"res");
if ( argc(arg) == 3 )
resultp(CO,VR((P)ARG0(arg)),(P)ARG1(arg),(P)ARG2(arg),rp);
else {
mod = QTOS((Q)ARG3(arg));
ptomp(mod,(P)ARG1(arg),&p1); ptomp(mod,(P)ARG2(arg),&p2);
resultmp(CO,mod,VR((P)ARG0(arg)),p1,p2,&r);
mptop(r,rp);
}
}
void Psrcr(arg,rp)
NODE arg;
P *rp;
{
asir_assert(ARG0(arg),O_P,"srcr");
asir_assert(ARG1(arg),O_P,"srcr");
asir_assert(ARG2(arg),O_P,"srcr");
res_ch_det(CO,VR((P)ARG0(arg)),(P)ARG1(arg),(P)ARG2(arg),rp);
}