/* testruntime.c June 11, 1982 2:42 PM */
char leftover;
int args[10];
int ta[10];
int mlerr[3];
int any;
main()
{
char c;
int i, result;
wf("\rRuntimeTest.\r");
result = ssenable(mlerr);
if (result) wf(" ##\r");
for (;;) {
wf("% ");
c = getchar() & 0177;
switch (c) {
case 'q': {
wf("\rQuit!\r");
return;
};
case '1': { getarg(0); break; };
case '2': { getarg(1); break; };
case '3': { getarg(2); break; };
case '4': { getarg(3); break; };
case 'p': { printargs(); break; };
case 'c': { testcompare(); break; };
case 'a': { testarith(); break; };
default: wf("\r unknown command\r");
};
}; /* end of forever loop */
};
copyargs()
{
int i;
for (i = 0; i < 10; i +=1 ) { ta[i] = args[i]; };
};
getarg(an)
int an;
{
wf1("arg word %d: ", an);
args[an] = gethex();
wfcr();
printarg(an);
};
printargs()
{
int i;
for (i = 0; i<4; i+=1) printarg(i);
};
printarg(i)
int i;
{
wf3("arg %d = %xH, %d\r", i, args[i], args[i]);
};
printta(i)
int i;
{
wf3("arg %d = %xH, %d\r", i, ta[i], ta[i]);
};
printtapair(i)
int i;
{
printta(i);
printta(i+1);
};
testcompare()
{
copyargs();
ta[4] = Min(ta[0], ta[2]); /* compare low order words */
ta[5] = Max(ta[0], ta[2]);
ta[7] = UMax(ta[0], ta[2]);
ta[8] = Usc(ta[0], ta[2]);
wf("Min = ");
printta(4);
wf("Max = ");
printta(5);
wf("UMax = ");
printta(7);
wf("Usc = ");
printta(8);
};
testarith()
{
copyargs();
ta[4] = DoubleIncrement(&ta[0], ta[2]);
wf("DoubleIncrement returns ");
printta(4);
wf(" newval = ");
printtapair(0);
copyargs();
ta[4] = DoubleDifference(&ta[0], &ta[2]);
wf("DoubleDifference returns ");
printta(4);
wf(" newval = ");
printtapair(0);
copyargs();
ta[4] = DoubleInc(&ta[0], ta[2]);
wf("DoubleInc returns ");
printta(4);
wf(" newval = ");
printtapair(0);
copyargs();
ta[4] = DoubleDiff(&ta[0], &ta[2]);
wf("DoubleDiff returns ");
printta(4);
wf(" newval = ");
printtapair(0);
copyargs();
ta[4] = DoubleEq(&ta[0], &ta[2]);
wf("DoubleEq returns ");
printta(4);
copyargs();
ta[4] = MultEq(&ta[0], &ta[2], 2);
wf("MultEq returns ");
printta(4);
ta[4] = MultEq(&ta[0], &ta[0], 4);
wf("MultEq (4) returns ");
printta(4);
};
mlabort()
{
ssreturn(mlerr, 1);
};
int egetchar() /* getchar with echo */
{
leftover = getchar() & 0177;
putcrchar(leftover);
if (leftover == 0177) mlabort();
return(leftover);
};
int gethex()
{
int v;
v = 0;
any = 0;
for (;;) {
egetchar();
if (isdigit(leftover)) {
v = (v<<4);
v += (leftover-'0');
any = 1;
continue;
};
leftover = lc(leftover);
if (leftover>='a' && leftover<='f') {
v = (v<<4);
v += (leftover-'a'+10);
any = 1;
continue;
};
break;
};
return(v);
};