#ifndef __COTHREADS_H__ #define __COTHREADS_H__ #include #include #define COTHREAD_STACKSIZE 8192 #define COTHREAD_MAXTHREADS 16 #define STACK_SIZE 0x200000 #ifndef CURRENT_STACK_FRAME #define CURRENT_STACK_FRAME ({ char __csf; &__csf; }) #endif /* CURRENT_STACK_FRAME */ typedef struct _cothread_state cothread_state; typedef struct _cothread_context cothread_context; typedef int (*cothread_func)(int argc,char **argv); #define COTHREAD_STARTED 0x01 struct _cothread_state { cothread_context *ctx; int threadnum; cothread_func func; int argc; char **argv; int flags; int *sp; int *pc; jmp_buf jmp; }; struct _cothread_context { cothread_state *threads[COTHREAD_MAXTHREADS]; int nthreads; int current; }; cothread_context *cothread_init(); cothread_state *cothread_create(cothread_context *ctx); void cothread_setfunc(cothread_state *thread,cothread_func func,int argc,char **argv); void cothread_switch(cothread_state *thread); cothread_state *cothread_main(cothread_context *ctx); #endif /* __COTHREAD_H__ */