/*
 *%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 *  SCR_Page.h
 *  Scripts, Beaudet Christophe
 *%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 *
 */
 
#ifndef __SCR_Page_h__Types
#define __SCR_Page_h__Types
 
#ifndef __Only_Types__
#define __SCR_Page_h__Undef
#define __Only_Types__
#endif /* !__Only_Types__ */
 
/*
 *=================================================================================================
 *  Includes.
 *=================================================================================================
 */
 
#ifdef __SCR_Mode_h__Undef
#undef __Only_Types__
#undef __SCR_Mode_h__Undef
#endif /* __SCR_Mode_h__Undef */
 
/*
 *=================================================================================================
 *  Constants.
 *=================================================================================================
 */
 
/*
 *  To export code.
 */
#undef CPA_EXPORT
#if defined(CPA_WANTS_IMPORT)
#define CPA_EXPORT __declspec(dllimport)
#elif defined(CPA_WANTS_EXPORT)
#define CPA_EXPORT __declspec(dllexport)
#else /* CPA_WANTS_IMPORT */
#define CPA_EXPORT
#endif /* CPA_WANTS_IMPORT */
 
/*
 *=================================================================================================
 *  Types.
 *=================================================================================================
 */
 
/*
 *  Structure that describes a memory page.
 */
typedef struct SCR_tdst_Page_Description_
{
	SCR_tdst_DyAr_Header				stHeader;		/* Header of element */
    struct SCR_tdst_Page_Description_   *p_stNext;      /* Next page */
    struct SCR_tdst_Page_Description_   *p_stPrev;      /* Previous page */
    char                                *d_cBuffer;     /* Buffer of page */
    int                                 iNumOfChars;    /* Number of characters in page */
} SCR_tdst_Page_Description;
 
#endif /* !__SCR_Mode_h__Types */
 
/*
 *=================================================================================================
 *  Protos.
 *=================================================================================================
 */
 
#if !defined(__SCR_Page_h__Protos) && !defined(__Only_Types__)
#define __SCR_Page_h__Protos
 
extern SCR_tdst_Page_Description    *fnp_st_Page_Allocate(void);
extern void                         fn_v_Page_Free(SCR_tdst_Page_Description *);
extern void                         fn_v_Page_DeleteAll(SCR_tdst_File_Description *);
 
extern void                         fn_v_Page_LinkAfter(SCR_tdst_File_Description *, SCR_tdst_Page_Description *,  SCR_tdst_Page_Description *);
extern void                         fn_v_Page_Unlink(SCR_tdst_File_Description *, SCR_tdst_Page_Description *);
extern void                         fn_v_Page_Split(SCR_tdst_File_Description *, SCR_tdst_Page_Description *);
 
extern void                         fn_v_Page_InsertChar(SCR_tdst_File_Description *, char);
extern void                         fn_v_Page_DeleteChar(SCR_tdst_File_Description *);
 
extern void                         fn_v_Page_ToNextChar(SCR_tdst_File_Description *);
extern void                         fn_v_Page_ToPrevChar(SCR_tdst_File_Description *);
 
extern void                         fn_v_Page_LoadFile(SCR_tdst_File_Description *);
extern void                         fn_v_Page_SaveFile(SCR_tdst_File_Description *);
 
extern void                         fn_v_Page_Seek(SCR_tdst_File_Description *, long, int);
 
#endif /* !__SCR_Page_h__Protos && !__Only_Types__ */
