// ************************************************************************** //
//                                                                            //
//    eses                   eses                                             //
//   eses                     eses                                            //
//  eses    eseses  esesese    eses   Embedded Systems Group                  //
//  ese    ese  ese ese         ese                                           //
//  ese    eseseses eseseses    ese   Department of Computer Science          //
//  eses   eses          ese   eses                                           //
//   eses   eseses  eseseses  eses    University of Kaiserslautern            //
//    eses                   eses                                             //
//                                                                            //
// ************************************************************************** //

// The following algorithm converts a given integer zin to its B-complement   //

// representation to base B provided that N digits are sufficient.            //
// ************************************************************************** //

macro B = 4;

macro N = 10;



module ToBComplement(int ?zin,[N]nat{B} x,event !rdy) {
    int z;
    nat{N+1} i;
    z = zin;
    i = 0;
    while(z!=0 & z!=-1) {
        x[i] = z % B;
        next(i) = i+1;
        next(z) = z / B;
        pause;
    }
    while(i<N) {
        x[i] = (z==0 ? 0 : B-1);
        next(i) = i+1;
        pause;
    }
    emit(rdy);

}

drivenby {
    zin = 25;
    await(rdy);
}

drivenby {
    zin = -25;
    await(rdy);
}