#ifndef NATIO_H
#define NATIO_H

#ifndef __PPC__
#define __PPC__
#endif


#ifdef __VBCC__
#pragma amiga-align
#endif

#include <exec/lists.h>

#include <dos/dos.h>

#ifdef __VBCC__
#pragma default-align
#endif

#define	WRITE_BUFSIZE	131072
#define R_WRITE_BUFSIZE	1024 // Write buffer allocated for files opened for reading, dummy

#define READ_BUFSIZE	262144
#define W_READ_BUFSIZE	16384 // Read buffer allocated for files opened for writing.

#define R_BUF_THRES	65536 // Minimum size for the dynamic read buffer.

struct CIOBuf
{
APTR buf;
ULONG size;
ULONG currentcount;
ULONG eof_pos;
char * current; // Mirror of currentcount, as a pointer.
//ULONG tot_fetched;
};

#define AVAILSPACE_P(bp)	(bp->size - min(bp->currentcount, b.eof_pos))
#define AVAILSPACE(b)		(b.size - min(b.currentcount, b.eof_pos))

#define AVAILSPACE_W(b)		(b.size - b.currentcount)

#define ADVANCE_BUF_P(bp, delta) bp->currentcount += delta; bp->current += delta
#define ADVANCE_BUF(b,delta)	 b.currentcount += delta; b.current += delta

#define RESET_BUF_P(bp)	bp->currentcount = 0; bp->current = (char *)bp->buf; bp->eof_pos = 0
#define RESET_BUF(b)	b.currentcount = 0; b.current = (char *)b.buf; b.eof_pos = 0

struct myFILE
{
BPTR filepointer;
struct CIOBuf r_buf;
struct CIOBuf w_buf;
struct Node * backtrack; // Used when closing files.
};

struct natio_node
{
struct Node node;
struct myFILE * f;
};

#ifndef min
#define   min(a,b)    ((a) <= (b) ? (a) : (b))
#endif

#ifndef man
#define   max(a,b)    ((a) > (b) ? (a) : (b))
#endif

#endif /* NATIO_H */
