83 lines
1.4 KiB
Plaintext
83 lines
1.4 KiB
Plaintext
/***********************************************************************
|
|
* skeleton: misc.sk
|
|
***********************************************************************/
|
|
/* $Id: misc.sk,v 1.1 1999/04/28 10:06:17 kenmcd Exp $ */
|
|
|
|
/*
|
|
* operator RULE
|
|
*/
|
|
|
|
void
|
|
rule(Expr *x)
|
|
{
|
|
Expr *arg1 = x->arg1;
|
|
Expr *arg2 = x->arg2;
|
|
int sts;
|
|
|
|
EVALARG(arg1)
|
|
if ((x->valid = arg1->valid) > 0) {
|
|
sts = (*(Truth *)x->ring = *(Truth *)arg1->ring);
|
|
if (sts == FALSE)
|
|
perf->eval_false++;
|
|
else if (sts == TRUE) {
|
|
perf->eval_true++;
|
|
EVALARG(arg2)
|
|
}
|
|
else
|
|
perf->eval_unknown++;
|
|
}
|
|
else
|
|
perf->eval_unknown++;
|
|
}
|
|
|
|
|
|
/*
|
|
* operator: cndDelay
|
|
*/
|
|
|
|
void
|
|
cndDelay_n(Expr *x)
|
|
{
|
|
Expr *arg1 = x->arg1;
|
|
int n = arg1->tdom;
|
|
Sample *is = &arg1->smpls[n - 1];
|
|
Sample *os = &x->smpls[0];
|
|
@ITYPE *ip;
|
|
@OTYPE *op;
|
|
int i;
|
|
|
|
EVALARG(arg1)
|
|
ROTATE(x)
|
|
|
|
if (arg1->valid >= n) {
|
|
ip = (@ITYPE *)is->ptr;
|
|
op = (@OTYPE *)os->ptr;
|
|
for (i = 0; i < x->tspan; i++)
|
|
*op++ = *ip++;
|
|
os->stamp = is->stamp;
|
|
x->valid++;
|
|
}
|
|
else x->valid = 0;
|
|
}
|
|
|
|
void
|
|
cndDelay_1(Expr *x)
|
|
{
|
|
Expr *arg1 = x->arg1;
|
|
int n = arg1->tdom;
|
|
Sample *is = &arg1->smpls[n - 1];
|
|
Sample *os = &x->smpls[0];
|
|
|
|
EVALARG(arg1)
|
|
ROTATE(x)
|
|
|
|
if (arg1->valid >= n) {
|
|
*(@OTYPE *)os->ptr = *(@ITYPE *)is->ptr;
|
|
os->stamp = is->stamp;
|
|
x->valid++;
|
|
}
|
|
else x->valid = 0;
|
|
}
|
|
|
|
|