Skip to content

Latest commit

 

History

History
155 lines (127 loc) · 4.84 KB

SDL_rwops.h

File metadata and controls

155 lines (127 loc) · 4.84 KB
 
Apr 26, 2001
Apr 26, 2001
1
2
/*
SDL - Simple DirectMedia Layer
Dec 8, 2008
Dec 8, 2008
3
Copyright (C) 1997-2009 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
*/
Sep 21, 2009
Sep 21, 2009
23
24
25
26
/** @file SDL_rwops.h
* This file provides a general interface for SDL to read and write
* data sources. It can easily be extended to files, memory, etc.
*/
Apr 26, 2001
Apr 26, 2001
27
Feb 21, 2006
Feb 21, 2006
28
29
#ifndef _SDL_rwops_h
#define _SDL_rwops_h
Apr 26, 2001
Apr 26, 2001
30
Feb 9, 2006
Feb 9, 2006
31
#include "SDL_stdinc.h"
Feb 10, 2006
Feb 10, 2006
32
#include "SDL_error.h"
Apr 26, 2001
Apr 26, 2001
33
34
35
36
37
38
39
#include "begin_code.h"
/* Set up for C function definitions, even when using C++ */
#ifdef __cplusplus
extern "C" {
#endif
Sep 21, 2009
Sep 21, 2009
40
/** This is the read/write operation structure -- very basic */
Apr 26, 2001
Apr 26, 2001
41
42
typedef struct SDL_RWops {
Sep 21, 2009
Sep 21, 2009
43
44
45
/** Seek to 'offset' relative to whence, one of stdio's whence values:
* SEEK_SET, SEEK_CUR, SEEK_END
* Returns the final offset in the data source.
Apr 26, 2001
Apr 26, 2001
46
*/
Aug 20, 2004
Aug 20, 2004
47
int (SDLCALL *seek)(struct SDL_RWops *context, int offset, int whence);
Apr 26, 2001
Apr 26, 2001
48
Sep 21, 2009
Sep 21, 2009
49
50
51
/** Read up to 'maxnum' objects each of size 'size' from the data
* source to the area pointed at by 'ptr'.
* Returns the number of objects read, or -1 if the read failed.
Apr 26, 2001
Apr 26, 2001
52
*/
Aug 20, 2004
Aug 20, 2004
53
int (SDLCALL *read)(struct SDL_RWops *context, void *ptr, int size, int maxnum);
Apr 26, 2001
Apr 26, 2001
54
Sep 21, 2009
Sep 21, 2009
55
56
57
/** Write exactly 'num' objects each of size 'objsize' from the area
* pointed at by 'ptr' to data source.
* Returns 'num', or -1 if the write failed.
Apr 26, 2001
Apr 26, 2001
58
*/
Aug 20, 2004
Aug 20, 2004
59
int (SDLCALL *write)(struct SDL_RWops *context, const void *ptr, int size, int num);
Apr 26, 2001
Apr 26, 2001
60
Sep 21, 2009
Sep 21, 2009
61
/** Close and free an allocated SDL_FSops structure */
Aug 20, 2004
Aug 20, 2004
62
int (SDLCALL *close)(struct SDL_RWops *context);
Apr 26, 2001
Apr 26, 2001
63
64
65
Uint32 type;
union {
Jul 10, 2007
Jul 10, 2007
66
#if defined(__WIN32__) && !defined(__SYMBIAN32__)
Feb 27, 2006
Feb 27, 2006
67
struct {
Jul 10, 2007
Jul 10, 2007
68
69
70
71
72
73
74
int append;
void *h;
struct {
void *data;
int size;
int left;
} buffer;
Feb 27, 2006
Feb 27, 2006
75
} win32io;
Feb 27, 2006
Feb 27, 2006
76
#endif
Feb 27, 2006
Feb 27, 2006
77
#ifdef HAVE_STDIO_H
Apr 26, 2001
Apr 26, 2001
78
79
80
81
struct {
int autoclose;
FILE *fp;
} stdio;
Feb 6, 2006
Feb 6, 2006
82
#endif
Apr 26, 2001
Apr 26, 2001
83
84
85
86
87
88
89
90
91
92
93
94
95
struct {
Uint8 *base;
Uint8 *here;
Uint8 *stop;
} mem;
struct {
void *data1;
} unknown;
} hidden;
} SDL_RWops;
Sep 21, 2009
Sep 21, 2009
96
97
/** @name Functions to create SDL_RWops structures from various data sources */
/*@{*/
Apr 26, 2001
Apr 26, 2001
98
Apr 11, 2002
Apr 11, 2002
99
extern DECLSPEC SDL_RWops * SDLCALL SDL_RWFromFile(const char *file, const char *mode);
Apr 26, 2001
Apr 26, 2001
100
Feb 6, 2006
Feb 6, 2006
101
#ifdef HAVE_STDIO_H
Apr 11, 2002
Apr 11, 2002
102
extern DECLSPEC SDL_RWops * SDLCALL SDL_RWFromFP(FILE *fp, int autoclose);
Feb 6, 2006
Feb 6, 2006
103
#endif
Apr 26, 2001
Apr 26, 2001
104
Apr 11, 2002
Apr 11, 2002
105
extern DECLSPEC SDL_RWops * SDLCALL SDL_RWFromMem(void *mem, int size);
Jan 4, 2004
Jan 4, 2004
106
extern DECLSPEC SDL_RWops * SDLCALL SDL_RWFromConstMem(const void *mem, int size);
Apr 26, 2001
Apr 26, 2001
107
Apr 11, 2002
Apr 11, 2002
108
109
extern DECLSPEC SDL_RWops * SDLCALL SDL_AllocRW(void);
extern DECLSPEC void SDLCALL SDL_FreeRW(SDL_RWops *area);
Apr 26, 2001
Apr 26, 2001
110
Sep 21, 2009
Sep 21, 2009
111
112
113
114
115
116
117
118
/*@}*/
/** @name Seek Reference Points */
/*@{*/
#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
119
Sep 21, 2009
Sep 21, 2009
120
121
/** @name Macros to easily read and write from an SDL_RWops structure */
/*@{*/
Apr 26, 2001
Apr 26, 2001
122
#define SDL_RWseek(ctx, offset, whence) (ctx)->seek(ctx, offset, whence)
Feb 6, 2006
Feb 6, 2006
123
#define SDL_RWtell(ctx) (ctx)->seek(ctx, 0, RW_SEEK_CUR)
Apr 26, 2001
Apr 26, 2001
124
125
126
#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)
Sep 21, 2009
Sep 21, 2009
127
/*@}*/
Apr 26, 2001
Apr 26, 2001
128
Sep 21, 2009
Sep 21, 2009
129
130
/** @name Read an item of the specified endianness and return in native format */
/*@{*/
Feb 9, 2006
Feb 9, 2006
131
132
133
134
135
136
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);
Sep 21, 2009
Sep 21, 2009
137
/*@}*/
Feb 9, 2006
Feb 9, 2006
138
Sep 21, 2009
Sep 21, 2009
139
140
/** @name Write an item of native format to the specified endianness */
/*@{*/
Feb 9, 2006
Feb 9, 2006
141
142
143
144
145
146
extern DECLSPEC int SDLCALL SDL_WriteLE16(SDL_RWops *dst, Uint16 value);
extern DECLSPEC int SDLCALL SDL_WriteBE16(SDL_RWops *dst, Uint16 value);
extern DECLSPEC int SDLCALL SDL_WriteLE32(SDL_RWops *dst, Uint32 value);
extern DECLSPEC int SDLCALL SDL_WriteBE32(SDL_RWops *dst, Uint32 value);
extern DECLSPEC int SDLCALL SDL_WriteLE64(SDL_RWops *dst, Uint64 value);
extern DECLSPEC int SDLCALL SDL_WriteBE64(SDL_RWops *dst, Uint64 value);
Sep 21, 2009
Sep 21, 2009
147
/*@}*/
Feb 9, 2006
Feb 9, 2006
148
Apr 26, 2001
Apr 26, 2001
149
150
151
152
153
154
/* Ends C function definitions when using C++ */
#ifdef __cplusplus
}
#endif
#include "close_code.h"
Feb 21, 2006
Feb 21, 2006
155
#endif /* _SDL_rwops_h */