/* testutils.c D. Swinehart, July 9, 1982 12:51 PM L. Stewart, October 6, 1982 3:09 PM L. Stewart, December 27, 1982 3:23 PM, flush nested declarations L. Stewart, January 1, 1983 4:20 PM, flush AllocZero L. Stewart, January 3, 1983 1:30 PM, flush CStringToString L. Stewart, March 6, 1983 4:45 PM, unflush CStringToString */ #include <Env.h> #include <Alloc.h> #include <Queue.h> #include <Context.h> #include <Signal.h> extern struct ZN *GetAll(); extern int *Alloc(); extern InitQueue(); extern StartNProcess(); extern int CtxRunning; struct ZN *zone, *myZone; static struct Queue *ctxQ; static int quit; static int args[10]; static int ta[10]; static int mlerr[3]; static int leftover; static int any; extern/*forward*/ Loop(); main() { zone = myZone = GetAll(); ctxQ = (struct Queue *) Alloc(zone, 2); InitQueue(ctxQ); StartNProcess("Loop", ctxQ, &Loop, 300, 75); quit=false; while (!quit) { CallContext(ctxQ->head); }; }; static Loop() { char c; int i, result; for (;;) { wf("% "); while (!chav()) Block(); c = getchar() & 0177; switch (c) { case 'q': { wf("\rQuit!\r"); quit=true; Block(); }; case '0': { getarg(0); break; }; case '1': { getarg(1); break; }; case '2': { getarg(2); break; }; case '3': { getarg(3); break; }; case '4': { getarg(4); break; }; case '5': { getarg(5); break; }; case '6': { getarg(6); break; }; case '7': { getarg(7); break; }; case '8': { getarg(8); break; }; case '9': { getarg(9); break; }; case 'p': { printargs(); break; }; case 'z': { args[5] = (int) Alloc(zone, 10); printarg(5); break; }; case 'f': { Free56(); break; }; case 's': { CtoS(); break; }; case 'c': { StoC(); break; }; case 'l': { args[7] = StringSize(args[5]); printarg(7); break; }; case 'n': { args[7] = StringSizeN(args[1]); printarg(7); break; }; case 'v': { SV(); break; }; case 'm': { args[7] = InstanceToMachine(args[5]);printarg(7);break;}; case 'k': { args[6] = MakeKey(zone, args[5]); printarg(6); break; }; case 'a': { App(); break; }; case 'e': { Eq(); break; }; case 'o': { Marshall1(); break; }; case 'x': { args[6] = ShallString(0, args[5], 1); printarg(6); break; }; case 'y': { args[5] = ShallString(0, args[6], 2); printarg(4); break; }; default: wf("\r unknown command\r"); }; }; }; static Marshall1() { Marshall((args[1]<0), &args[5], &args[1], 4); printargs(); }; static App() { struct ShortSTRING *s; s = CStringToString("abcdefghijklmnop"); args[7] = AppendString(args[5], s); printarg(5); printarg(7); Free(zone, s); }; static Eq() { struct ShortSTRING *s; s = CStringToString("173#6#"); args[7] = EquivalentStrings(args[5], s); printarg(5); printarg(7); Free(zone, s); }; static Free56() { if (args[5]) Free(zone, args[5]); if (args[6]) Free(zone, args[6]); args[5] = args[6] = 0; }; char *StringToCString(zone, s) struct ZN *zone; struct ShortSTRING *s; { int len, i; char b[]; len = s->length; b = (char *) Allocate(zone, len/2+1); for (i = 0; i<len; ++i) b[i] = s->text[i]; b[i]=0; return(b); }; static SV() { args[7] = GetSigVec(); args[8] = CtxRunning; printarg(7); printarg(8); }; static CtoS() { struct ShortSTRING *s; args[5] = CStringToString("173#6#xxxxxxxx"); s = (struct ShortSTRING *) args[5]; s->length = 6; printarg(5); }; static StoC() { args[6] = StringToCString(zone, args[5]); printarg(6); }; static copyargs() { int i; for (i = 0; i < 10; i +=1 ) { ta[i] = args[i]; }; }; static getarg(an) int an; { wf1("arg word %d: ", an); args[an] = gethex(); wfcr(); printarg(an); }; static printargs() { int i; wfcr(); for (i = 0; i<10; i+=1) printarg(i); }; static printarg(i) int i; { wf3("arg %d = %xH, %d\r", i, args[i], args[i]); }; static printta(i) int i; { wf3("arg %d = %xH, %d\r", i, ta[i], ta[i]); }; static printtapair(i) int i; { printta(i); printta(i+1); }; static 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); }; static int egetchar() /* getchar with echo */ { leftover = getchar() & 0177; putcrchar(leftover); return(leftover); }; static int generator; int NewPSB() { if (++generator > maxPSB) SIGNAL(ERROR, 0); return generator; };