/* testctx.c
  L. Stewart October 6, 1982  3:03 PM
 */

extern GetAll();
extern InitQueue();
extern Enqueue();
extern Alloc();
extern settmr();
extern tmrexp();
extern Block();
extern InitNContext();
extern CallContext();

extern int pr1, pr2, pr3;
int zone;
int q[2];
int space, ctx;

main()
  {
  int i, mt;
  zone = GetAll();
  InitQueue(q);
  initpa();
  space = Alloc(zone, 300);
  wf("a1\r");
  ctx = InitNContext("pr1", space, 300, pr1);
  wf("i1\r");
  Enqueue(q, ctx);
  wf("e1\r");
  space = Alloc(zone, 300);
  wf("a2\r");
  ctx = InitNContext("pr2", space, 300, pr2);
  wf("i2\r");
  Enqueue(q, ctx);
  wf("e2\r");
  space = Alloc(zone, 300);
  wf("a3\r");
  ctx = InitNContext("pr3", space, 300, pr3);
  wf("i3\r");
  Enqueue(q, ctx);
  wf("e3\r");
  for (i=0; i<10; i+=1) {
    settmr(2000, &mt);
    while(!tmrexp(&mt));
    wf1("loop %d\r", i);
    };
  for (;;) {
    CallContext(q[0]);
    wf("c");
    };
  };

proc1()
  {
  wf("p1\r");
  for (;;) {
    Dismiss(1000);
    putchar('1');
    };
  };

proc2()
  {
  wf("p2\r");
  for (;;) {
    Dismiss(2000);
    putchar('2');
    };
  };

proc3()
  {
  wf("p3\r");
  for (;;) {
    Dismiss(3000);
    putchar('3');
    };
  };

Dismiss(t)
  int t;
  {
  int tmr;
  settmr(t, &tmr);
  while(!tmrexp(&tmr)) Block();
  };