#include <stdio.h>
#include "parc.h"

using namespace parc;

module top {
public:
  char i;
  top() {
    i = 1;
  }

  signal<char> sig;

  process p1 {
    driver<char> drv1=sig;
  start:
    drv1 = 0;
    for (; i < 5 ; i++) {
      printf("p1: %d\n",i);
      drv1 @ 5 := sig + 1;
      wait(5);
    }
  } a;

  process p2 {
    char d;
  start:
    for (;;) { 
      @(sig) switch (sig & 1) {
        case 1:  printf("p2: odd  @ %d\n",Kern->Now().L()); break;
        default: printf("p2: even @ %d\n",Kern->Now().L()); break;
      }
    }
  } b;

  process p3 {
    char d; 
  start:
    for (;;) { 
      @(sig) 
        printf("p3: %d\n",sig.Value()); 
    }
  } c;

};

void test()
{
  top t;

  root()->StartAll();
}

int main(int argc,char **argv)
{
  test();
}