
typedef struct odirect_buffer
	{
	char *real_buffer;
	char *aligned_buffer;
	int align_to;
	int maximum_buffer_size;
	int current_buffer_size;
	} odirect_buffer;

typedef struct binary_data
	{
	int size;
	char *data;
	} binary_data;

struct odirect_buffer *create_odirect_buffer(void);
void destroy_odirect_buffer(struct odirect_buffer *odirect_buffer);

/* odirect.c */
void odirect_aligned_malloc(int usable_buffer_size, int align_to, struct odirect_buffer *odirect_buffer);
void odirect_aligned_free(struct odirect_buffer *odirect_buffer);
int odirect_open(char *filename, char *ASCII_flags);
int odirect_push(int file_descriptor, struct odirect_buffer *odirect_buffer, binary_data binary_data);
binary_data odirect_pull(int file_descriptor, struct odirect_buffer *odirect_buffer);
int odirect_close(int file_descriptor);

