38 #endif |
38 #endif |
39 |
39 |
40 /** This is the read/write operation structure -- very basic */ |
40 /** This is the read/write operation structure -- very basic */ |
41 |
41 |
42 typedef struct SDL_RWops { |
42 typedef struct SDL_RWops { |
43 /** Seek to 'offset' relative to whence, one of stdio's whence values: |
43 /** Seek to 'offset' relative to whence, one of stdio's whence values: |
44 * SEEK_SET, SEEK_CUR, SEEK_END |
44 * SEEK_SET, SEEK_CUR, SEEK_END |
45 * Returns the final offset in the data source. |
45 * Returns the final offset in the data source. |
46 */ |
46 */ |
47 int (SDLCALL *seek)(struct SDL_RWops *context, int offset, int whence); |
47 int (SDLCALL *seek)(struct SDL_RWops *context, int offset, int whence); |
48 |
48 |
49 /** Read up to 'maxnum' objects each of size 'size' from the data |
49 /** Read up to 'maxnum' objects each of size 'size' from the data |
50 * source to the area pointed at by 'ptr'. |
50 * source to the area pointed at by 'ptr'. |
51 * Returns the number of objects read, or -1 if the read failed. |
51 * Returns the number of objects read, or -1 if the read failed. |
52 */ |
52 */ |
53 int (SDLCALL *read)(struct SDL_RWops *context, void *ptr, int size, int maxnum); |
53 int (SDLCALL *read)(struct SDL_RWops *context, void *ptr, int size, int maxnum); |
54 |
54 |
55 /** Write exactly 'num' objects each of size 'objsize' from the area |
55 /** Write exactly 'num' objects each of size 'objsize' from the area |
56 * pointed at by 'ptr' to data source. |
56 * pointed at by 'ptr' to data source. |
57 * Returns 'num', or -1 if the write failed. |
57 * Returns 'num', or -1 if the write failed. |
58 */ |
58 */ |
59 int (SDLCALL *write)(struct SDL_RWops *context, const void *ptr, int size, int num); |
59 int (SDLCALL *write)(struct SDL_RWops *context, const void *ptr, int size, int num); |
60 |
60 |
61 /** Close and free an allocated SDL_FSops structure */ |
61 /** Close and free an allocated SDL_FSops structure */ |
62 int (SDLCALL *close)(struct SDL_RWops *context); |
62 int (SDLCALL *close)(struct SDL_RWops *context); |
63 |
63 |
64 Uint32 type; |
64 Uint32 type; |
65 union { |
65 union { |
66 #if defined(__WIN32__) && !defined(__SYMBIAN32__) |
66 #if defined(__WIN32__) && !defined(__SYMBIAN32__) |
67 struct { |
67 struct { |
68 int append; |
68 int append; |
69 void *h; |
69 void *h; |
70 struct { |
70 struct { |
71 void *data; |
71 void *data; |
72 int size; |
72 int size; |
73 int left; |
73 int left; |
74 } buffer; |
74 } buffer; |
75 } win32io; |
75 } win32io; |
76 #endif |
76 #endif |
77 #ifdef HAVE_STDIO_H |
77 #ifdef HAVE_STDIO_H |
78 struct { |
78 struct { |
79 int autoclose; |
79 int autoclose; |
80 FILE *fp; |
80 FILE *fp; |
81 } stdio; |
81 } stdio; |
82 #endif |
82 #endif |
83 struct { |
83 struct { |
84 Uint8 *base; |
84 Uint8 *base; |
85 Uint8 *here; |
85 Uint8 *here; |
86 Uint8 *stop; |
86 Uint8 *stop; |
87 } mem; |
87 } mem; |
88 struct { |
88 struct { |
89 void *data1; |
89 void *data1; |
90 } unknown; |
90 } unknown; |
91 } hidden; |
91 } hidden; |
92 |
92 |
93 } SDL_RWops; |
93 } SDL_RWops; |
94 |
94 |
95 |
95 |
96 /** @name Functions to create SDL_RWops structures from various data sources */ |
96 /** @name Functions to create SDL_RWops structures from various data sources */ |
110 |
110 |
111 /*@}*/ |
111 /*@}*/ |
112 |
112 |
113 /** @name Seek Reference Points */ |
113 /** @name Seek Reference Points */ |
114 /*@{*/ |
114 /*@{*/ |
115 #define RW_SEEK_SET 0 /**< Seek from the beginning of data */ |
115 #define RW_SEEK_SET 0 /**< Seek from the beginning of data */ |
116 #define RW_SEEK_CUR 1 /**< Seek relative to current read point */ |
116 #define RW_SEEK_CUR 1 /**< Seek relative to current read point */ |
117 #define RW_SEEK_END 2 /**< Seek relative to the end of data */ |
117 #define RW_SEEK_END 2 /**< Seek relative to the end of data */ |
118 /*@}*/ |
118 /*@}*/ |
119 |
119 |
120 /** @name Macros to easily read and write from an SDL_RWops structure */ |
120 /** @name Macros to easily read and write from an SDL_RWops structure */ |
121 /*@{*/ |
121 /*@{*/ |
122 #define SDL_RWseek(ctx, offset, whence) (ctx)->seek(ctx, offset, whence) |
122 #define SDL_RWseek(ctx, offset, whence) (ctx)->seek(ctx, offset, whence) |
123 #define SDL_RWtell(ctx) (ctx)->seek(ctx, 0, RW_SEEK_CUR) |
123 #define SDL_RWtell(ctx) (ctx)->seek(ctx, 0, RW_SEEK_CUR) |
124 #define SDL_RWread(ctx, ptr, size, n) (ctx)->read(ctx, ptr, size, n) |
124 #define SDL_RWread(ctx, ptr, size, n) (ctx)->read(ctx, ptr, size, n) |
125 #define SDL_RWwrite(ctx, ptr, size, n) (ctx)->write(ctx, ptr, size, n) |
125 #define SDL_RWwrite(ctx, ptr, size, n) (ctx)->write(ctx, ptr, size, n) |
126 #define SDL_RWclose(ctx) (ctx)->close(ctx) |
126 #define SDL_RWclose(ctx) (ctx)->close(ctx) |
127 /*@}*/ |
127 /*@}*/ |
128 |
128 |
129 /** @name Read an item of the specified endianness and return in native format */ |
129 /** @name Read an item of the specified endianness and return in native format */ |
130 /*@{*/ |
130 /*@{*/ |
131 extern DECLSPEC Uint16 SDLCALL SDL_ReadLE16(SDL_RWops *src); |
131 extern DECLSPEC Uint16 SDLCALL SDL_ReadLE16(SDL_RWops *src); |