include/SDL_rwops.h
changeset 1895 c121d94672cb
parent 1453 2eb75f8a32ca
child 2159 dd4753e47ed4
equal deleted inserted replaced
1894:c69cee13dd76 1895:c121d94672cb
    18 
    18 
    19     Sam Lantinga
    19     Sam Lantinga
    20     slouken@libsdl.org
    20     slouken@libsdl.org
    21 */
    21 */
    22 
    22 
    23 /* This file provides a general interface for SDL to read and write
    23 /**
    24    data sources.  It can easily be extended to files, memory, etc.
    24  * \file SDL_rwops.h
    25 */
    25  *
       
    26  * This file provides a general interface for SDL to read and write
       
    27  * data sources.  It can easily be extended to files, memory, etc.
       
    28  */
    26 
    29 
    27 #ifndef _SDL_rwops_h
    30 #ifndef _SDL_rwops_h
    28 #define _SDL_rwops_h
    31 #define _SDL_rwops_h
    29 
    32 
    30 #include "SDL_stdinc.h"
    33 #include "SDL_stdinc.h"
    31 #include "SDL_error.h"
    34 #include "SDL_error.h"
    32 
    35 
    33 #include "begin_code.h"
    36 #include "begin_code.h"
    34 /* Set up for C function definitions, even when using C++ */
    37 /* Set up for C function definitions, even when using C++ */
    35 #ifdef __cplusplus
    38 #ifdef __cplusplus
       
    39 /* *INDENT-OFF* */
    36 extern "C" {
    40 extern "C" {
       
    41 /* *INDENT-ON* */
    37 #endif
    42 #endif
    38 
    43 
    39 /* This is the read/write operation structure -- very basic */
    44 /* This is the read/write operation structure -- very basic */
    40 
    45 
    41 typedef struct SDL_RWops {
    46 typedef struct SDL_RWops
    42 	/* Seek to 'offset' relative to whence, one of stdio's whence values:
    47 {
    43 		SEEK_SET, SEEK_CUR, SEEK_END
    48     /* Seek to 'offset' relative to whence, one of stdio's whence values:
    44 	   Returns the final offset in the data source.
    49        SEEK_SET, SEEK_CUR, SEEK_END
    45 	 */
    50        Returns the final offset in the data source.
    46 	int (SDLCALL *seek)(struct SDL_RWops *context, int offset, int whence);
    51      */
       
    52     int (SDLCALL * seek) (struct SDL_RWops * context, int offset, int whence);
    47 
    53 
    48 	/* Read up to 'num' objects each of size 'objsize' from the data
    54     /* Read up to 'num' objects each of size 'objsize' from the data
    49 	   source to the area pointed at by 'ptr'.
    55        source to the area pointed at by 'ptr'.
    50 	   Returns the number of objects read, or -1 if the read failed.
    56        Returns the number of objects read, or -1 if the read failed.
    51 	 */
    57      */
    52 	int (SDLCALL *read)(struct SDL_RWops *context, void *ptr, int size, int maxnum);
    58     int (SDLCALL * read) (struct SDL_RWops * context, void *ptr, int size,
       
    59                           int maxnum);
    53 
    60 
    54 	/* Write exactly 'num' objects each of size 'objsize' from the area
    61     /* Write exactly 'num' objects each of size 'objsize' from the area
    55 	   pointed at by 'ptr' to data source.
    62        pointed at by 'ptr' to data source.
    56 	   Returns 'num', or -1 if the write failed.
    63        Returns 'num', or -1 if the write failed.
    57 	 */
    64      */
    58 	int (SDLCALL *write)(struct SDL_RWops *context, const void *ptr, int size, int num);
    65     int (SDLCALL * write) (struct SDL_RWops * context, const void *ptr,
       
    66                            int size, int num);
    59 
    67 
    60 	/* Close and free an allocated SDL_FSops structure */
    68     /* Close and free an allocated SDL_FSops structure */
    61 	int (SDLCALL *close)(struct SDL_RWops *context);
    69     int (SDLCALL * close) (struct SDL_RWops * context);
    62 
    70 
    63 	Uint32 type;
    71     Uint32 type;
    64 	union {
    72     union
       
    73     {
    65 #ifdef __WIN32__
    74 #ifdef __WIN32__
    66 	    struct {
    75         struct
    67 		int    append;
    76         {
    68 		void*  h;
    77             int append;
    69 	    } win32io;
    78             void *h;
       
    79         } win32io;
    70 #endif
    80 #endif
    71 #ifdef HAVE_STDIO_H 
    81 #ifdef HAVE_STDIO_H
    72 	    struct {
    82         struct
    73 		int autoclose;
    83         {
    74 	 	FILE *fp;
    84             int autoclose;
    75 	    } stdio;
    85             FILE *fp;
       
    86         } stdio;
    76 #endif
    87 #endif
    77 	    struct {
    88         struct
    78 		Uint8 *base;
    89         {
    79 	 	Uint8 *here;
    90             Uint8 *base;
    80 		Uint8 *stop;
    91             Uint8 *here;
    81 	    } mem;
    92             Uint8 *stop;
    82 	    struct {
    93         } mem;
    83 		void *data1;
    94         struct
    84 	    } unknown;
    95         {
    85 	} hidden;
    96             void *data1;
       
    97         } unknown;
       
    98     } hidden;
    86 
    99 
    87 } SDL_RWops;
   100 } SDL_RWops;
    88 
   101 
    89 
   102 
    90 /* Functions to create SDL_RWops structures from various data sources */
   103 /* Functions to create SDL_RWops structures from various data sources */
    91 
   104 
    92 extern DECLSPEC SDL_RWops * SDLCALL SDL_RWFromFile(const char *file, const char *mode);
   105 extern DECLSPEC SDL_RWops *SDLCALL SDL_RWFromFile(const char *file,
       
   106                                                   const char *mode);
    93 
   107 
    94 #ifdef HAVE_STDIO_H
   108 #ifdef HAVE_STDIO_H
    95 extern DECLSPEC SDL_RWops * SDLCALL SDL_RWFromFP(FILE *fp, int autoclose);
   109 extern DECLSPEC SDL_RWops *SDLCALL SDL_RWFromFP(FILE * fp, int autoclose);
    96 #endif
   110 #endif
    97 
   111 
    98 extern DECLSPEC SDL_RWops * SDLCALL SDL_RWFromMem(void *mem, int size);
   112 extern DECLSPEC SDL_RWops *SDLCALL SDL_RWFromMem(void *mem, int size);
    99 extern DECLSPEC SDL_RWops * SDLCALL SDL_RWFromConstMem(const void *mem, int size);
   113 extern DECLSPEC SDL_RWops *SDLCALL SDL_RWFromConstMem(const void *mem,
       
   114                                                       int size);
   100 
   115 
   101 extern DECLSPEC SDL_RWops * SDLCALL SDL_AllocRW(void);
   116 extern DECLSPEC SDL_RWops *SDLCALL SDL_AllocRW(void);
   102 extern DECLSPEC void SDLCALL SDL_FreeRW(SDL_RWops *area);
   117 extern DECLSPEC void SDLCALL SDL_FreeRW(SDL_RWops * area);
   103 
   118 
   104 #define RW_SEEK_SET	0	/* Seek from the beginning of data */
   119 #define RW_SEEK_SET	0       /* Seek from the beginning of data */
   105 #define RW_SEEK_CUR	1	/* Seek relative to current read point */
   120 #define RW_SEEK_CUR	1       /* Seek relative to current read point */
   106 #define RW_SEEK_END	2	/* Seek relative to the end of data */
   121 #define RW_SEEK_END	2       /* Seek relative to the end of data */
   107 
   122 
   108 /* Macros to easily read and write from an SDL_RWops structure */
   123 /* Macros to easily read and write from an SDL_RWops structure */
   109 #define SDL_RWseek(ctx, offset, whence)	(ctx)->seek(ctx, offset, whence)
   124 #define SDL_RWseek(ctx, offset, whence)	(ctx)->seek(ctx, offset, whence)
   110 #define SDL_RWtell(ctx)			(ctx)->seek(ctx, 0, RW_SEEK_CUR)
   125 #define SDL_RWtell(ctx)			(ctx)->seek(ctx, 0, RW_SEEK_CUR)
   111 #define SDL_RWread(ctx, ptr, size, n)	(ctx)->read(ctx, ptr, size, n)
   126 #define SDL_RWread(ctx, ptr, size, n)	(ctx)->read(ctx, ptr, size, n)
   112 #define SDL_RWwrite(ctx, ptr, size, n)	(ctx)->write(ctx, ptr, size, n)
   127 #define SDL_RWwrite(ctx, ptr, size, n)	(ctx)->write(ctx, ptr, size, n)
   113 #define SDL_RWclose(ctx)		(ctx)->close(ctx)
   128 #define SDL_RWclose(ctx)		(ctx)->close(ctx)
   114 
   129 
   115 
   130 
   116 /* Read an item of the specified endianness and return in native format */
   131 /* Read an item of the specified endianness and return in native format */
   117 extern DECLSPEC Uint16 SDLCALL SDL_ReadLE16(SDL_RWops *src);
   132 extern DECLSPEC Uint16 SDLCALL SDL_ReadLE16(SDL_RWops * src);
   118 extern DECLSPEC Uint16 SDLCALL SDL_ReadBE16(SDL_RWops *src);
   133 extern DECLSPEC Uint16 SDLCALL SDL_ReadBE16(SDL_RWops * src);
   119 extern DECLSPEC Uint32 SDLCALL SDL_ReadLE32(SDL_RWops *src);
   134 extern DECLSPEC Uint32 SDLCALL SDL_ReadLE32(SDL_RWops * src);
   120 extern DECLSPEC Uint32 SDLCALL SDL_ReadBE32(SDL_RWops *src);
   135 extern DECLSPEC Uint32 SDLCALL SDL_ReadBE32(SDL_RWops * src);
   121 extern DECLSPEC Uint64 SDLCALL SDL_ReadLE64(SDL_RWops *src);
   136 extern DECLSPEC Uint64 SDLCALL SDL_ReadLE64(SDL_RWops * src);
   122 extern DECLSPEC Uint64 SDLCALL SDL_ReadBE64(SDL_RWops *src);
   137 extern DECLSPEC Uint64 SDLCALL SDL_ReadBE64(SDL_RWops * src);
   123 
   138 
   124 /* Write an item of native format to the specified endianness */
   139 /* Write an item of native format to the specified endianness */
   125 extern DECLSPEC int SDLCALL SDL_WriteLE16(SDL_RWops *dst, Uint16 value);
   140 extern DECLSPEC int SDLCALL SDL_WriteLE16(SDL_RWops * dst, Uint16 value);
   126 extern DECLSPEC int SDLCALL SDL_WriteBE16(SDL_RWops *dst, Uint16 value);
   141 extern DECLSPEC int SDLCALL SDL_WriteBE16(SDL_RWops * dst, Uint16 value);
   127 extern DECLSPEC int SDLCALL SDL_WriteLE32(SDL_RWops *dst, Uint32 value);
   142 extern DECLSPEC int SDLCALL SDL_WriteLE32(SDL_RWops * dst, Uint32 value);
   128 extern DECLSPEC int SDLCALL SDL_WriteBE32(SDL_RWops *dst, Uint32 value);
   143 extern DECLSPEC int SDLCALL SDL_WriteBE32(SDL_RWops * dst, Uint32 value);
   129 extern DECLSPEC int SDLCALL SDL_WriteLE64(SDL_RWops *dst, Uint64 value);
   144 extern DECLSPEC int SDLCALL SDL_WriteLE64(SDL_RWops * dst, Uint64 value);
   130 extern DECLSPEC int SDLCALL SDL_WriteBE64(SDL_RWops *dst, Uint64 value);
   145 extern DECLSPEC int SDLCALL SDL_WriteBE64(SDL_RWops * dst, Uint64 value);
   131 
   146 
   132 
   147 
   133 /* Ends C function definitions when using C++ */
   148 /* Ends C function definitions when using C++ */
   134 #ifdef __cplusplus
   149 #ifdef __cplusplus
       
   150 /* *INDENT-OFF* */
   135 }
   151 }
       
   152 /* *INDENT-ON* */
   136 #endif
   153 #endif
   137 #include "close_code.h"
   154 #include "close_code.h"
   138 
   155 
   139 #endif /* _SDL_rwops_h */
   156 #endif /* _SDL_rwops_h */
       
   157 
       
   158 /* vi: set ts=4 sw=4 expandtab: */