summaryrefslogtreecommitdiff
path: root/Build/source/libs/libttf/ttfile.h
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/libs/libttf/ttfile.h')
-rw-r--r--Build/source/libs/libttf/ttfile.h271
1 files changed, 271 insertions, 0 deletions
diff --git a/Build/source/libs/libttf/ttfile.h b/Build/source/libs/libttf/ttfile.h
new file mode 100644
index 00000000000..eebd1c1d43e
--- /dev/null
+++ b/Build/source/libs/libttf/ttfile.h
@@ -0,0 +1,271 @@
+/*******************************************************************
+ *
+ * ttfile.h 1.3
+ *
+ * File I/O Component (specification).
+ *
+ * Copyright 1996-1999 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used
+ * modified and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT. By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ * Changes between 1.3 and 1.2:
+ *
+ * - all functions report error values now
+ *
+ * - the stream semantics have also changed
+ *
+ * Changes between 1.2 and 1.1:
+ *
+ * - added macros to support re-entrant builds
+ *
+ * - added the TT_Duplicate_File function to duplicate streams
+ * (re-entrant builds only)
+ *
+ ******************************************************************/
+
+#ifndef TTFILE_H
+#define TTFILE_H
+
+#include "ttconfig.h"
+#include "freetype.h"
+#include "ttengine.h"
+#include "ttdebug.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+ /* Initialize file component */
+ LOCAL_DEF
+ TT_Error TTFile_Init( PEngine_Instance engine );
+
+ /* Done with file component */
+ LOCAL_DEF
+ TT_Error TTFile_Done( PEngine_Instance engine );
+
+
+ /**********************************************************************/
+ /* */
+ /* Stream functions. */
+ /* */
+ /**********************************************************************/
+
+ /* Open a file and return a stream handle for it. */
+ /* Should only be used for a new face object's main stream. */
+
+ LOCAL_DEF
+ TT_Error TT_Open_Stream( const TT_Text* name,
+ TT_Stream* stream );
+
+
+ /* Closes, then discards, a stream when it's no longer needed. */
+ /* Should only be used for a stream opend with TT_Open_Stream(). */
+
+ LOCAL_DEF
+ TT_Error TT_Close_Stream( TT_Stream* stream );
+
+
+ /* Informs the component that we're going to use the file */
+ /* opened in 'org_stream', and report errors to the 'error' */
+ /* variable. */
+
+ /* in non re-entrant builds, 'org_stream' is simply copied */
+ /* to 'stream'. Otherwise, the latter is a duplicate handle */
+ /* for the file opened with 'org_stream' */
+
+ EXPORT_DEF
+ TT_Error TT_Use_Stream( TT_Stream org_stream,
+ TT_Stream* stream );
+
+ /* Informs the component that we don't need to perform file */
+ /* operations on the stream 'stream' anymore. This must be */
+ /* used with streams "opened" with TT_Use_Stream() only! */
+
+ /* in re-entrant builds, this will really discard the stream */
+
+ EXPORT_DEF
+ TT_Error TT_Done_Stream( TT_Stream* stream );
+
+ /* Closes the stream's file handle to release system resources */
+ /* The function TT_Use_Stream automatically re-activates a */
+ /* flushed stream when it uses one */
+
+ EXPORT_DEF
+ TT_Error TT_Flush_Stream( TT_Stream* stream );
+
+/* The macros STREAM_ARGS and STREAM_ARG let us build a thread-safe */
+/* or re-entrant implementation depending on a single configuration */
+/*define. */
+
+#ifdef TT_CONFIG_OPTION_THREAD_SAFE
+
+#define STREAM_ARGS TT_Stream stream,
+#define STREAM_ARG TT_Stream stream
+
+#else
+
+#define STREAM_ARGS /* void */
+#define STREAM_ARG void
+
+#endif /* TT_CONFIG_OPTION_THREAD_SAFE */
+
+
+ /****************************************************************/
+ /* */
+ /* File Functions. */
+ /* */
+ /* The following functions perform file operations on the */
+ /* currently 'used' stream. In thread-safe builds, only one */
+ /* stream can be used at a time. Synchronisation is performed */
+ /* through the Use_Stream()/Done_Stream() functions. */
+ /* */
+ /****************************************************************/
+
+ /* Read 'count' bytes from file into 'buffer' */
+
+ EXPORT_DEF
+ TT_Error TT_Read_File( STREAM_ARGS void* buffer,
+ Long count );
+
+
+ /* Seek file cursor to a given position */
+
+ EXPORT_DEF
+ TT_Error TT_Seek_File( STREAM_ARGS Long position );
+
+
+ /* Skip the next 'distance' bytes in file */
+
+ EXPORT_DEF
+ TT_Error TT_Skip_File( STREAM_ARGS Long distance );
+
+
+ /* Read the 'count' bytes at 'position' into 'buffer' */
+
+ EXPORT_DEF
+ TT_Error TT_Read_At_File( STREAM_ARGS Long position,
+ void* buffer,
+ Long count );
+
+ /* Return current file position */
+
+ EXPORT_DEF
+ Long TT_File_Pos( STREAM_ARG );
+
+ /* Return length of a given stream, even if it is flushed */
+
+ EXPORT_DEF
+ Long TT_Stream_Size( TT_Stream stream );
+
+
+ /********************************************************************/
+ /* */
+ /* Frame operations. */
+ /* */
+ /* For a comprehensive explanation of frames, please refer to the */
+ /* documentation files. */
+ /* */
+ /********************************************************************/
+
+ /* Frame type declaration.*/
+
+ struct TFileFrame_
+ {
+ Byte* address; /* frame buffer */
+ Byte* cursor; /* current cursor position in frame */
+ Long size; /* frame size */
+ };
+
+ typedef struct TFileFrame_ TFileFrame;
+
+ EXPORT_DEF
+ const TFileFrame TT_Null_FileFrame;
+
+
+/* The macro ZERO_Frame is used to define and init a frame. */
+/* It is important to have a default frame of { NULL, NULL, 0 } */
+/* before a call to TT_Access_Frame(). Otherwise, the call will */
+/* fail with a TT_Err_Nested_Frame_Accesses error. */
+
+#define ZERO_Frame( frame ) \
+ { \
+ (frame).address = NULL; \
+ (frame).cursor = NULL; \
+ (frame).size = 0; \
+ }
+
+
+/* The macros FRAME_ARGS and FRAME_ARG let us build a thread-safe */
+/* or re-entrant implementation depending on a single configuration */
+/* define */
+
+#ifdef TT_CONFIG_OPTION_THREAD_SAFE
+
+#define FRAME_ARGS TFileFrame* frame,
+#define FRAME_ARG TFileFrame* frame
+
+#else
+
+#define FRAME_ARGS /* void */
+#define FRAME_ARG void
+
+#endif /* TT_CONFIG_OPTION_THREAD_SAFE */
+
+
+ /* Access the next 'size' bytes from current position. */
+ /* Fails if all bytes cannot be read/accessed. */
+
+ EXPORT_DEF
+ TT_Error TT_Access_Frame( STREAM_ARGS FRAME_ARGS Long size );
+
+
+ /* Access the bytes located in the next 'size' bytes of the file. */
+ /* Doesn't fail if less than 'size' bytes are accessible (like */
+ /* at the end of the file). */
+
+ EXPORT_DEF
+ TT_Error TT_Check_And_Access_Frame( STREAM_ARGS FRAME_ARGS Long size );
+
+ /* Forget frame */
+
+ EXPORT_DEF
+ TT_Error TT_Forget_Frame( FRAME_ARG );
+
+
+ /* primitive routines for data accessing */
+
+ EXPORT_DEF
+ Char TT_Get_Char ( FRAME_ARG );
+ EXPORT_DEF
+ Short TT_Get_Short( FRAME_ARG );
+ EXPORT_DEF
+ Long TT_Get_Long ( FRAME_ARG );
+
+#ifdef TT_CONFIG_OPTION_THREAD_SAFE
+
+#define TT_Get_Byte( frame ) ( (Byte )TT_Get_Char ( frame ) )
+#define TT_Get_UShort( frame ) ( (UShort)TT_Get_Short( frame ) )
+#define TT_Get_ULong( frame ) ( (ULong )TT_Get_Long ( frame ) )
+
+#else
+
+#define TT_Get_Byte() ( (Byte )TT_Get_Char () )
+#define TT_Get_UShort() ( (UShort)TT_Get_Short() )
+#define TT_Get_ULong() ( (ULong )TT_Get_Long () )
+
+#endif /* TT_CONFIG_OPTION_THREAD_SAFE */
+
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* TTFILE_H */
+
+
+/* END */