#ifndef __COTHREADS_H__
#define __COTHREADS_H__

#include <setjmp.h>
#include <pthread.h>

#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__ */
