view ABP/sender3.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

#include <stdio.h>

extern int comm_bit_s;  /* communication bit for sender */
extern int comm_bit_r;  /* communication bit for receiver */
extern char *comm_msg;  /* communication message */

extern struct queue *list;
typedef struct queue *QueuePtr;

struct packet {
	int        bit;  /* alternating bit */
	char     **msg;  /* messages */
	code (*next)();  /* next code segment */
};

extern code schedule(QueuePtr task_list, int i);
code s_sendState(struct packet *, int i);
code s_receiveState(struct packet *, int i);

code s_receiveState(struct packet *pkt, int i)
{
	/* correct bit */
	if (pkt->bit == comm_bit_r) {
		printf("sender: success\n");
		pkt->bit = !pkt->bit;
		i++;  // for message increment
		pkt->next = s_sendState;
		goto schedule(list, i);
	/* wrong bit */
	} else {
		printf("sender: failure\n");
		pkt->next = s_sendState;
		goto schedule(list, i);
	}
}

code s_sendState(struct packet *pkt, int i)
{
	comm_bit_s = pkt->bit;
	comm_msg = pkt->msg[i];
	pkt->next = s_receiveState;
	goto schedule(list, i);
}