#include <stdio.h>

typedef struct _continuation Continuation;
struct _continuation {
    int counter;
    Continuation (*next)(Continuation);
};
int Continue(Continuation ctx){
    while (ctx.next != 0){
        ctx = (*ctx.next)(ctx);
    }
    return ctx.counter;
}

Continuation inc(Continuation ctx){
    if (ctx.counter < 10000){
        ctx.counter++;
        //ctx.next = &prnt;
        printf("passing by %i\n", ctx.counter);
    }
    else{
        ctx.next = 0;
    }
    return ctx;
}

Continuation prnt(Continuation ctx){
    printf("at %i",ctx.counter);
    ctx.next = &inc;
    return ctx;
}

Continuation factory(){
    Continuation begin = {.next = &inc, .counter=0};
    return begin;
}

int main(void){
    printf("begin\n");
    Continue(factory());
    return 0;
}
