Man pages sections > man3 > ALLEGRO_FILE_INTERFACE

ALLEGRO_FILE_INTERFACE - Allegro 5 API

ALLEGRO_FILE_INTERFACE(3alleg5) ALLEGRO_FILE_INTERFACE(3alleg5)

NAME

ALLEGRO_FILE_INTERFACE - Allegro 5 API

SYNOPSIS

#include <allegro5/allegro.h>
typedef struct ALLEGRO_FILE_INTERFACE

DESCRIPTION

A structure containing function pointers to handle a type of "file", real or virtual. See the full discussion in al_set_new_file_interface(3alleg5).
The fields are:
void*         (*fi_fopen)(const char *path, const char *mode);
bool          (*fi_fclose)(ALLEGRO_FILE *f);
size_t        (*fi_fread)(ALLEGRO_FILE *f, void *ptr, size_t size);
size_t        (*fi_fwrite)(ALLEGRO_FILE *f, const void *ptr, size_t size);
bool          (*fi_fflush)(ALLEGRO_FILE *f);
int64_t       (*fi_ftell)(ALLEGRO_FILE *f);
bool          (*fi_fseek)(ALLEGRO_FILE *f, int64_t offset, int whence);
bool          (*fi_feof)(ALLEGRO_FILE *f);
int           (*fi_ferror)(ALLEGRO_FILE *f);
const char *  (*fi_ferrmsg)(ALLEGRO_FILE *f);
void          (*fi_fclearerr)(ALLEGRO_FILE *f);
int           (*fi_fungetc)(ALLEGRO_FILE *f, int c);
off_t         (*fi_fsize)(ALLEGRO_FILE *f);
    
The fi_open function must allocate memory for whatever userdata structure it needs. The pointer to that memory must be returned; it will then be associated with the file. The other functions can access that data by calling al_get_file_userdata(3alleg5) on the file handle. If fi_open returns NULL then al_fopen(3alleg5) will also return NULL.
The fi_fclose function must clean up and free the userdata, but Allegro will free the ALLEGRO_FILE(3alleg5) handle.
If fi_fungetc is NULL, then Allegro's default implementation of a 16 char long buffer will be used.
Allegro reference manual