/*. 2>/dev/null; cc -o demo -Wall -Wextra demo.c ccoro.o && exec ./demo "$@" ; exit 1 # */ /* * ccoro - coroutines in standard C * Sam Watkins, 2009 * this code is public domain * * This demo runs three coros to count, print factorials, print fibonacci sequence. */ #include #include #include "ccoro.h" int factorial(int n) { if (n == 0) return 1; return n * factorial(n-1); } int fibonacci(int n) { if (n == 0 || n == 1) return n; return fibonacci(n-1) + fibonacci(n-2); } void my_factorial_coro(coro *caller) { int i; for(i=9; i>=0; --i) { int j = factorial(i); printf(" %d %d\n", i, j); yield(&caller); } } void my_fibonacci_coro(coro *caller) { int i; for(i=1; i<8; ++i) { int j = fibonacci(i); printf(" %d %d\n", i, j); yield(&caller); } } int main(void) { coro *c = new_coro(my_fibonacci_coro); coro *c2 = new_coro(my_factorial_coro); int i; for(i=0; i<10; ++i) { printf("%d\n", i); yield(&c); yield(&c2); } if (c || c2) { fprintf(stderr, "the coros did not finish\n"); return 1; } return 0; }