#define NULE 0
#define MULE 8888

typedef struct NOiD_memory
{
	int id;
	int size;
	struct NOiD_memory * last;
	struct NOiD_memory * next;
} NOiD_memory;

typedef struct NOiD_yromem
{
	NOiD_memory * space;
	int id;
} NOiD_yromem;

NOiD_memory * NOiD_seg (void * , int );
void * NOiD_alloc (NOiD_memory * , int );
void NOiD_free (NOiD_memory * , void * );

//==========================

typedef struct NOiD_node
{
	void * pack;
	struct NOiD_node * last;
	struct NOiD_node * next;
} NOiD_node;

NOiD_node * NOiD_create (NOiD_node * noid_src, void * noid_pack, void * noid_ptr);
void * NOiD_destroy (NOiD_node * noid_src, NOiD_node * noid_nud);
void * NOiD_loop (NOiD_node * noid_src);

//==========================

typedef struct NOiD_agenda
{
	signed long int wait;		//interval between call
	void (*func)(void);		//function to call
	signed long int till;		//wait till to execute
	signed long int idle;		//time left before execute
	signed long int loop;		//value that end loop
	NOiD_node * node;		//the node that list it
} NOiD_agenda;

NOiD_node * NOiD_schedule (NOiD_node * , void (*)(void), signed long int  ,void * );
void * NOiD_cancel (NOiD_node * , NOiD_node * );
signed long int NOiD_do (NOiD_node * , signed long int );
