/* testalloc.c Swinehart, June 18, 1982 4:08 PM */
#include <Alloc.h>
char leftover;
int args[10];
int mlerr[3];
int any;
extern struct ZN *GetAll();
extern int *Alloc();
extern Free();
extern CheckZone();
main()
{
char c;
int i, result;
wf("\rAllocTest.\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; }; /* Zone */
case '2': { getarg(1); break; }; /* Which arg has result */
case '3': { getarg(2); break; }; /* Size of new block */
case '4': { getarg(3); break; }; /* Unassigned */
case 'p': { printargs(); break; };
case 'i': { initialize(); break; };
case 'a': { allocate(); break; };
case 'f': { release(); break; };
case 'c': { diagnose(); break; };
default: wf("\r unknown command\r");
};
}; /* end of forever loop */
};
getarg(an)
int an;
{
wf1("arg word %d: ", an);
args[an] = gethex();
wfcr();
printarg(an);
};
printargs()
{
int i;
for (i = 0; i<10; i+=1) printarg(i);
};
printarg(i)
int i;
{
wf3("arg %d = %xH, %d\r", i, args[i], args[i]);
};
initialize()
{
args[0] = (int) GetAll();
printarg(0);
};
allocate()
{
args[args[1]] = (int) Alloc(args[0], args[2]);
printarg(args[1]);
};
release()
{
Free(args[0], args[args[1]]);
};
diagnose()
{
CheckZone(args[0], 1);
};
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);
};