658
|
1 #include <stdio.h>
|
|
2 // #include "hoge.h"
|
|
3 // #include "task.h"
|
|
4
|
|
5 typedef
|
|
6 struct pkt {
|
|
7 int val;
|
|
8 __code (*next)(struct pkt *,struct task *);
|
|
9 } Pkt, *PktPtr;
|
|
10
|
|
11
|
|
12 typedef
|
|
13 struct task {
|
|
14 int val;
|
|
15 __code (*next)(struct pkt *,struct task *);
|
|
16 } Task, *TaskPtr;
|
|
17
|
|
18 int count = 5;
|
|
19
|
|
20 void *env;
|
|
21 __code (*exit0)(int);
|
|
22
|
|
23 __code scheduler(PktPtr pkt, TaskPtr task)
|
|
24 {
|
|
25 if (count-->0)
|
|
26 goto pkt->next(pkt,task);
|
|
27 goto exit0(0),env;
|
|
28 }
|
|
29
|
|
30 __code modulo(PktPtr pkt, TaskPtr current_task);
|
|
31
|
|
32 __code increment(PktPtr pkt, TaskPtr current_task)
|
|
33 {
|
|
34 pkt->val++;
|
|
35 printf("inc: %d\n", pkt->val);
|
|
36 pkt->next = modulo;
|
|
37 goto scheduler(pkt, current_task);
|
|
38 }
|
|
39
|
|
40 __code modulo(PktPtr pkt, TaskPtr current_task)
|
|
41 {
|
|
42 pkt->val %= 10;
|
|
43 pkt->val = pkt->val % 10;
|
|
44 printf("mod: %d\n", pkt->val);
|
|
45 pkt->next = increment;
|
|
46 goto scheduler(pkt, current_task);
|
|
47 }
|
|
48
|
|
49 static Pkt pkt;
|
|
50 static Task task;
|
|
51
|
|
52 int
|
|
53 main()
|
|
54 {
|
|
55 exit0 = return;
|
|
56 env = environment;
|
|
57 goto increment(&pkt,&task);
|
|
58 }
|