Skip to content
This repository has been archived by the owner on Feb 11, 2021. It is now read-only.

Latest commit

 

History

History
206 lines (175 loc) · 6.01 KB

SDL_rwops.h

File metadata and controls

206 lines (175 loc) · 6.01 KB
 
Apr 26, 2001
Apr 26, 2001
1
2
/*
SDL - Simple DirectMedia Layer
Jan 24, 2010
Jan 24, 2010
3
Copyright (C) 1997-2010 Sam Lantinga
Apr 26, 2001
Apr 26, 2001
4
5
This library is free software; you can redistribute it and/or
Feb 1, 2006
Feb 1, 2006
6
modify it under the terms of the GNU Lesser General Public
Apr 26, 2001
Apr 26, 2001
7
License as published by the Free Software Foundation; either
Feb 1, 2006
Feb 1, 2006
8
version 2.1 of the License, or (at your option) any later version.
Apr 26, 2001
Apr 26, 2001
9
10
11
12
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Feb 1, 2006
Feb 1, 2006
13
Lesser General Public License for more details.
Apr 26, 2001
Apr 26, 2001
14
Feb 1, 2006
Feb 1, 2006
15
16
17
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Apr 26, 2001
Apr 26, 2001
18
19
Sam Lantinga
Dec 14, 2001
Dec 14, 2001
20
slouken@libsdl.org
Apr 26, 2001
Apr 26, 2001
21
22
*/
Jul 10, 2006
Jul 10, 2006
23
/**
Oct 19, 2009
Oct 19, 2009
24
25
26
* \file SDL_rwops.h
*
* This file provides a general interface for SDL to read and write
Jan 12, 2011
Jan 12, 2011
27
* data streams. It can easily be extended to files, memory, etc.
Jul 10, 2006
Jul 10, 2006
28
*/
Apr 26, 2001
Apr 26, 2001
29
Feb 21, 2006
Feb 21, 2006
30
31
#ifndef _SDL_rwops_h
#define _SDL_rwops_h
Apr 26, 2001
Apr 26, 2001
32
Feb 9, 2006
Feb 9, 2006
33
#include "SDL_stdinc.h"
Feb 10, 2006
Feb 10, 2006
34
#include "SDL_error.h"
Apr 26, 2001
Apr 26, 2001
35
36
37
38
#include "begin_code.h"
/* Set up for C function definitions, even when using C++ */
#ifdef __cplusplus
Jul 10, 2006
Jul 10, 2006
39
/* *INDENT-OFF* */
Apr 26, 2001
Apr 26, 2001
40
extern "C" {
Jul 10, 2006
Jul 10, 2006
41
/* *INDENT-ON* */
Apr 26, 2001
Apr 26, 2001
42
43
#endif
Oct 19, 2009
Oct 19, 2009
44
45
46
/**
* This is the read/write operation structure -- very basic.
*/
Jul 10, 2006
Jul 10, 2006
47
48
typedef struct SDL_RWops
{
Oct 19, 2009
Oct 19, 2009
49
50
51
52
/**
* Seek to \c offset relative to \c whence, one of stdio's whence values:
* RW_SEEK_SET, RW_SEEK_CUR, RW_SEEK_END
*
Jan 12, 2011
Jan 12, 2011
53
* \return the final offset in the data stream.
Jul 10, 2006
Jul 10, 2006
54
*/
Jul 10, 2007
Jul 10, 2007
55
56
long (SDLCALL * seek) (struct SDL_RWops * context, long offset,
int whence);
Jul 10, 2006
Jul 10, 2006
57
Oct 19, 2009
Oct 19, 2009
58
/**
Jan 6, 2010
Jan 6, 2010
59
* Read up to \c maxnum objects each of size \c size from the data
Jan 12, 2011
Jan 12, 2011
60
* stream to the area pointed at by \c ptr.
Oct 19, 2009
Oct 19, 2009
61
62
*
* \return the number of objects read, or 0 at error or end of file.
Jul 10, 2006
Jul 10, 2006
63
*/
Oct 19, 2009
Oct 19, 2009
64
65
66
67
size_t(SDLCALL * read) (struct SDL_RWops * context, void *ptr,
size_t size, size_t maxnum);
/**
Aug 23, 2010
Aug 23, 2010
68
* Write exactly \c num objects each of size \c size from the area
Jan 12, 2011
Jan 12, 2011
69
* pointed at by \c ptr to data stream.
Oct 19, 2009
Oct 19, 2009
70
71
*
* \return the number of objects written, or 0 at error or end of file.
Jul 10, 2006
Jul 10, 2006
72
*/
Oct 19, 2009
Oct 19, 2009
73
74
size_t(SDLCALL * write) (struct SDL_RWops * context, const void *ptr,
size_t size, size_t num);
Jul 10, 2006
Jul 10, 2006
75
Oct 19, 2009
Oct 19, 2009
76
77
78
79
/**
* Close and free an allocated SDL_RWops structure.
*
* \return 0 if successful or -1 on write error when flushing data.
Jul 10, 2007
Jul 10, 2007
80
*/
Jul 10, 2006
Jul 10, 2006
81
82
83
84
85
int (SDLCALL * close) (struct SDL_RWops * context);
Uint32 type;
union
{
Feb 27, 2006
Feb 27, 2006
86
#ifdef __WIN32__
Jul 10, 2006
Jul 10, 2006
87
88
struct
{
Jul 10, 2007
Jul 10, 2007
89
SDL_bool append;
Jul 10, 2006
Jul 10, 2006
90
void *h;
Jul 10, 2007
Jul 10, 2007
91
92
93
struct
{
void *data;
Sep 5, 2009
Sep 5, 2009
94
95
size_t size;
size_t left;
Jul 10, 2007
Jul 10, 2007
96
} buffer;
Jul 10, 2006
Jul 10, 2006
97
} win32io;
Feb 27, 2006
Feb 27, 2006
98
#endif
Jul 10, 2006
Jul 10, 2006
99
100
101
#ifdef HAVE_STDIO_H
struct
{
Jul 10, 2007
Jul 10, 2007
102
SDL_bool autoclose;
Jul 10, 2006
Jul 10, 2006
103
104
FILE *fp;
} stdio;
Feb 6, 2006
Feb 6, 2006
105
#endif
Jul 10, 2006
Jul 10, 2006
106
107
108
109
110
111
112
113
114
115
116
struct
{
Uint8 *base;
Uint8 *here;
Uint8 *stop;
} mem;
struct
{
void *data1;
} unknown;
} hidden;
Apr 26, 2001
Apr 26, 2001
117
118
119
120
} SDL_RWops;
Oct 19, 2009
Oct 19, 2009
121
122
123
/**
* \name RWFrom functions
*
Jan 12, 2011
Jan 12, 2011
124
* Functions to create SDL_RWops structures from various data streams.
Oct 19, 2009
Oct 19, 2009
125
126
*/
/*@{*/
Apr 26, 2001
Apr 26, 2001
127
Jul 10, 2006
Jul 10, 2006
128
129
extern DECLSPEC SDL_RWops *SDLCALL SDL_RWFromFile(const char *file,
const char *mode);
Apr 26, 2001
Apr 26, 2001
130
Feb 6, 2006
Feb 6, 2006
131
#ifdef HAVE_STDIO_H
Jul 10, 2007
Jul 10, 2007
132
133
extern DECLSPEC SDL_RWops *SDLCALL SDL_RWFromFP(FILE * fp,
SDL_bool autoclose);
Dec 15, 2009
Dec 15, 2009
134
135
136
#else
extern DECLSPEC SDL_RWops *SDLCALL SDL_RWFromFP(void * fp,
SDL_bool autoclose);
Feb 6, 2006
Feb 6, 2006
137
#endif
Apr 26, 2001
Apr 26, 2001
138
Jul 10, 2006
Jul 10, 2006
139
140
141
extern DECLSPEC SDL_RWops *SDLCALL SDL_RWFromMem(void *mem, int size);
extern DECLSPEC SDL_RWops *SDLCALL SDL_RWFromConstMem(const void *mem,
int size);
Apr 26, 2001
Apr 26, 2001
142
Oct 19, 2009
Oct 19, 2009
143
144
145
/*@}*//*RWFrom functions*/
Jul 10, 2006
Jul 10, 2006
146
147
extern DECLSPEC SDL_RWops *SDLCALL SDL_AllocRW(void);
extern DECLSPEC void SDLCALL SDL_FreeRW(SDL_RWops * area);
Apr 26, 2001
Apr 26, 2001
148
Oct 19, 2009
Oct 19, 2009
149
150
151
#define RW_SEEK_SET 0 /**< Seek from the beginning of data */
#define RW_SEEK_CUR 1 /**< Seek relative to current read point */
#define RW_SEEK_END 2 /**< Seek relative to the end of data */
Feb 6, 2006
Feb 6, 2006
152
Oct 19, 2009
Oct 19, 2009
153
154
155
156
157
158
/**
* \name Read/write macros
*
* Macros to easily read and write from an SDL_RWops structure.
*/
/*@{*/
Apr 26, 2001
Apr 26, 2001
159
#define SDL_RWseek(ctx, offset, whence) (ctx)->seek(ctx, offset, whence)
Feb 6, 2006
Feb 6, 2006
160
#define SDL_RWtell(ctx) (ctx)->seek(ctx, 0, RW_SEEK_CUR)
Apr 26, 2001
Apr 26, 2001
161
162
163
#define SDL_RWread(ctx, ptr, size, n) (ctx)->read(ctx, ptr, size, n)
#define SDL_RWwrite(ctx, ptr, size, n) (ctx)->write(ctx, ptr, size, n)
#define SDL_RWclose(ctx) (ctx)->close(ctx)
Oct 19, 2009
Oct 19, 2009
164
/*@}*//*Read/write macros*/
Apr 26, 2001
Apr 26, 2001
165
166
Oct 19, 2009
Oct 19, 2009
167
168
169
170
171
172
/**
* \name Read endian functions
*
* Read an item of the specified endianness and return in native format.
*/
/*@{*/
Jul 10, 2006
Jul 10, 2006
173
174
175
176
177
178
extern DECLSPEC Uint16 SDLCALL SDL_ReadLE16(SDL_RWops * src);
extern DECLSPEC Uint16 SDLCALL SDL_ReadBE16(SDL_RWops * src);
extern DECLSPEC Uint32 SDLCALL SDL_ReadLE32(SDL_RWops * src);
extern DECLSPEC Uint32 SDLCALL SDL_ReadBE32(SDL_RWops * src);
extern DECLSPEC Uint64 SDLCALL SDL_ReadLE64(SDL_RWops * src);
extern DECLSPEC Uint64 SDLCALL SDL_ReadBE64(SDL_RWops * src);
Oct 19, 2009
Oct 19, 2009
179
/*@}*//*Read endian functions*/
Feb 9, 2006
Feb 9, 2006
180
Oct 19, 2009
Oct 19, 2009
181
182
183
184
185
186
/**
* \name Write endian functions
*
* Write an item of native format to the specified endianness.
*/
/*@{*/
Sep 5, 2009
Sep 5, 2009
187
188
189
190
191
192
extern DECLSPEC size_t SDLCALL SDL_WriteLE16(SDL_RWops * dst, Uint16 value);
extern DECLSPEC size_t SDLCALL SDL_WriteBE16(SDL_RWops * dst, Uint16 value);
extern DECLSPEC size_t SDLCALL SDL_WriteLE32(SDL_RWops * dst, Uint32 value);
extern DECLSPEC size_t SDLCALL SDL_WriteBE32(SDL_RWops * dst, Uint32 value);
extern DECLSPEC size_t SDLCALL SDL_WriteLE64(SDL_RWops * dst, Uint64 value);
extern DECLSPEC size_t SDLCALL SDL_WriteBE64(SDL_RWops * dst, Uint64 value);
Oct 19, 2009
Oct 19, 2009
193
/*@}*//*Write endian functions*/
Feb 9, 2006
Feb 9, 2006
194
195
Apr 26, 2001
Apr 26, 2001
196
197
/* Ends C function definitions when using C++ */
#ifdef __cplusplus
Jul 10, 2006
Jul 10, 2006
198
/* *INDENT-OFF* */
Apr 26, 2001
Apr 26, 2001
199
}
Jul 10, 2006
Jul 10, 2006
200
/* *INDENT-ON* */
Apr 26, 2001
Apr 26, 2001
201
202
203
#endif
#include "close_code.h"
Feb 21, 2006
Feb 21, 2006
204
#endif /* _SDL_rwops_h */
Jul 10, 2006
Jul 10, 2006
205
206
/* vi: set ts=4 sw=4 expandtab: */