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

Latest commit

 

History

History
168 lines (138 loc) · 5.47 KB

SDL_rwops.h

File metadata and controls

168 lines (138 loc) · 5.47 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
*/
Jul 10, 2006
Jul 10, 2006
23
24
25
26
27
28
/**
* \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
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
44
45
#endif
/* This is the read/write operation structure -- very basic */
Jul 10, 2006
Jul 10, 2006
46
47
48
typedef struct SDL_RWops
{
/* Seek to 'offset' relative to whence, one of stdio's whence values:
Jul 10, 2007
Jul 10, 2007
49
RW_SEEK_SET, RW_SEEK_CUR, RW_SEEK_END
Jul 10, 2006
Jul 10, 2006
50
51
Returns the final offset in the data source.
*/
Jul 10, 2007
Jul 10, 2007
52
53
long (SDLCALL * seek) (struct SDL_RWops * context, long offset,
int whence);
Jul 10, 2006
Jul 10, 2006
54
55
56
/* Read up to 'num' objects each of size 'objsize' from the data
source to the area pointed at by 'ptr'.
Jul 10, 2007
Jul 10, 2007
57
Returns the number of objects read, or 0 at error or end of file.
Jul 10, 2006
Jul 10, 2006
58
*/
Jul 10, 2007
Jul 10, 2007
59
60
size_t(SDLCALL * read) (struct SDL_RWops * context, void *ptr,
size_t size, size_t maxnum);
Jul 10, 2006
Jul 10, 2006
61
62
63
/* Write exactly 'num' objects each of size 'objsize' from the area
pointed at by 'ptr' to data source.
Jul 10, 2007
Jul 10, 2007
64
Returns the number of objects written, or 0 at error or end of file.
Jul 10, 2006
Jul 10, 2006
65
*/
Jul 10, 2007
Jul 10, 2007
66
67
size_t(SDLCALL * write) (struct SDL_RWops * context, const void *ptr,
size_t size, size_t num);
Jul 10, 2006
Jul 10, 2006
68
Jul 10, 2007
Jul 10, 2007
69
70
71
/* Close and free an allocated SDL_RWops structure.
Returns 0 if successful or -1 on write error when flushing data.
*/
Jul 10, 2006
Jul 10, 2006
72
73
74
75
76
int (SDLCALL * close) (struct SDL_RWops * context);
Uint32 type;
union
{
Feb 27, 2006
Feb 27, 2006
77
#ifdef __WIN32__
Jul 10, 2006
Jul 10, 2006
78
79
struct
{
Jul 10, 2007
Jul 10, 2007
80
SDL_bool append;
Jul 10, 2006
Jul 10, 2006
81
void *h;
Jul 10, 2007
Jul 10, 2007
82
83
84
struct
{
void *data;
Sep 5, 2009
Sep 5, 2009
85
86
size_t size;
size_t left;
Jul 10, 2007
Jul 10, 2007
87
} buffer;
Jul 10, 2006
Jul 10, 2006
88
} win32io;
Feb 27, 2006
Feb 27, 2006
89
#endif
Jul 10, 2006
Jul 10, 2006
90
91
92
#ifdef HAVE_STDIO_H
struct
{
Jul 10, 2007
Jul 10, 2007
93
SDL_bool autoclose;
Jul 10, 2006
Jul 10, 2006
94
95
FILE *fp;
} stdio;
Feb 6, 2006
Feb 6, 2006
96
#endif
Jul 10, 2006
Jul 10, 2006
97
98
99
100
101
102
103
104
105
106
107
struct
{
Uint8 *base;
Uint8 *here;
Uint8 *stop;
} mem;
struct
{
void *data1;
} unknown;
} hidden;
Apr 26, 2001
Apr 26, 2001
108
109
110
111
112
113
} SDL_RWops;
/* Functions to create SDL_RWops structures from various data sources */
Jul 10, 2006
Jul 10, 2006
114
115
extern DECLSPEC SDL_RWops *SDLCALL SDL_RWFromFile(const char *file,
const char *mode);
Apr 26, 2001
Apr 26, 2001
116
Feb 6, 2006
Feb 6, 2006
117
#ifdef HAVE_STDIO_H
Jul 10, 2007
Jul 10, 2007
118
119
extern DECLSPEC SDL_RWops *SDLCALL SDL_RWFromFP(FILE * fp,
SDL_bool autoclose);
Feb 6, 2006
Feb 6, 2006
120
#endif
Apr 26, 2001
Apr 26, 2001
121
Jul 10, 2006
Jul 10, 2006
122
123
124
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
125
Jul 10, 2006
Jul 10, 2006
126
127
extern DECLSPEC SDL_RWops *SDLCALL SDL_AllocRW(void);
extern DECLSPEC void SDLCALL SDL_FreeRW(SDL_RWops * area);
Apr 26, 2001
Apr 26, 2001
128
Jul 10, 2006
Jul 10, 2006
129
130
131
#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
132
Apr 26, 2001
Apr 26, 2001
133
134
/* Macros to easily read and write from an SDL_RWops structure */
#define SDL_RWseek(ctx, offset, whence) (ctx)->seek(ctx, offset, whence)
Feb 6, 2006
Feb 6, 2006
135
#define SDL_RWtell(ctx) (ctx)->seek(ctx, 0, RW_SEEK_CUR)
Apr 26, 2001
Apr 26, 2001
136
137
138
139
140
#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)
Feb 9, 2006
Feb 9, 2006
141
/* Read an item of the specified endianness and return in native format */
Jul 10, 2006
Jul 10, 2006
142
143
144
145
146
147
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);
Feb 9, 2006
Feb 9, 2006
148
149
/* Write an item of native format to the specified endianness */
Sep 5, 2009
Sep 5, 2009
150
151
152
153
154
155
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);
Feb 9, 2006
Feb 9, 2006
156
157
Apr 26, 2001
Apr 26, 2001
158
159
/* Ends C function definitions when using C++ */
#ifdef __cplusplus
Jul 10, 2006
Jul 10, 2006
160
/* *INDENT-OFF* */
Apr 26, 2001
Apr 26, 2001
161
}
Jul 10, 2006
Jul 10, 2006
162
/* *INDENT-ON* */
Apr 26, 2001
Apr 26, 2001
163
164
165
#endif
#include "close_code.h"
Feb 21, 2006
Feb 21, 2006
166
#endif /* _SDL_rwops_h */
Jul 10, 2006
Jul 10, 2006
167
168
/* vi: set ts=4 sw=4 expandtab: */