Mercurial > hg > Members > nobuyasu > CbC
view ABP/receiver2.c @ 9:18d2a590bc10 draft
add fibonacci
author | Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Sun, 03 Jun 2012 22:06:40 +0900 |
parents | 5dc0fa7caa57 |
children |
line wrap: on
line source
int comm_bit; /* communication bit */ char *comm_msg; /* communication message */ struct packet { int bit; /*alternating bit */ char **msg; /* message */ code (*next)(); /* next code segment */ }; code (*ret)(int); void *env; code receiveState(struct packet, int); code sendState(struct packet, int); char *msgs[6] = { "hoge1", "hoge2", "hoge3", "hoge4", "hoge5", 0 }; code sendState(struct packet pkt, int i) { printf("ack\n"); comm_bit = pkt.bit; // ack comm_bit = !pkt.bit; // sender's task i++; // sender's task comm_msg = pkt.msg[i]; // sender's task pkt.next = receiveState; goto pkt.next(pkt, i); } code receiveState(struct packet pkt, int i) { if (pkt.msg[i] == 0) goto ret(0), env; /* correct bit */ if (pkt.bit != comm_bit) { printf("bit: %d\n", comm_bit); printf("message: %s\n", comm_msg); pkt.bit = !pkt.bit; pkt.next = sendState; goto pkt.next(pkt, i); /* wrong bit */ } else { printf("nack\n"); comm_bit = !pkt.bit; // sender's task pkt.next = receiveState; goto pkt.next(pkt, i); } } code initReceiver(struct packet pkt, int init_bit) { pkt.bit = 1; pkt.msg = msgs; comm_bit = init_bit; // sender's task comm_msg = pkt.msg[0]; // sender's task pkt.next = receiveState; goto pkt.next(pkt, 0); } int main(void) { struct packet pkt; ret = return; env = environment; goto initReceiver(pkt, 0); }