|
|
1.1 root 1: /*
2: SDL - Simple DirectMedia Layer
1.1.1.2 ! root 3: Copyright (C) 1997-2006 Sam Lantinga
1.1 root 4:
5: This library is free software; you can redistribute it and/or
1.1.1.2 ! root 6: modify it under the terms of the GNU Lesser General Public
1.1 root 7: License as published by the Free Software Foundation; either
1.1.1.2 ! root 8: version 2.1 of the License, or (at your option) any later version.
1.1 root 9:
10: This library is distributed in the hope that it will be useful,
11: but WITHOUT ANY WARRANTY; without even the implied warranty of
12: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
1.1.1.2 ! root 13: Lesser General Public License for more details.
1.1 root 14:
1.1.1.2 ! root 15: You should have received a copy of the GNU Lesser General Public
! 16: License along with this library; if not, write to the Free Software
! 17: Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
1.1 root 18:
19: Sam Lantinga
20: [email protected]
21: */
22:
23: /* This file provides a general interface for SDL to read and write
24: data sources. It can easily be extended to files, memory, etc.
25: */
26:
1.1.1.2 ! root 27: #ifndef _SDL_rwops_h
! 28: #define _SDL_rwops_h
1.1 root 29:
1.1.1.2 ! root 30: #include "SDL_stdinc.h"
! 31: #include "SDL_error.h"
1.1 root 32:
33: #include "begin_code.h"
34: /* Set up for C function definitions, even when using C++ */
35: #ifdef __cplusplus
36: extern "C" {
37: #endif
38:
39: /* This is the read/write operation structure -- very basic */
40:
41: typedef struct SDL_RWops {
42: /* Seek to 'offset' relative to whence, one of stdio's whence values:
43: SEEK_SET, SEEK_CUR, SEEK_END
44: Returns the final offset in the data source.
45: */
46: int (SDLCALL *seek)(struct SDL_RWops *context, int offset, int whence);
47:
48: /* Read up to 'num' objects each of size 'objsize' from the data
49: source to the area pointed at by 'ptr'.
50: Returns the number of objects read, or -1 if the read failed.
51: */
52: int (SDLCALL *read)(struct SDL_RWops *context, void *ptr, int size, int maxnum);
53:
54: /* Write exactly 'num' objects each of size 'objsize' from the area
55: pointed at by 'ptr' to data source.
56: Returns 'num', or -1 if the write failed.
57: */
58: int (SDLCALL *write)(struct SDL_RWops *context, const void *ptr, int size, int num);
59:
60: /* Close and free an allocated SDL_FSops structure */
61: int (SDLCALL *close)(struct SDL_RWops *context);
62:
63: Uint32 type;
64: union {
1.1.1.2 ! root 65: #if defined(__WIN32__) && !defined(__SYMBIAN32__)
! 66: struct {
! 67: int append;
! 68: void *h;
! 69: struct {
! 70: void *data;
! 71: int size;
! 72: int left;
! 73: } buffer;
! 74: } win32io;
! 75: #endif
! 76: #ifdef HAVE_STDIO_H
1.1 root 77: struct {
78: int autoclose;
79: FILE *fp;
80: } stdio;
1.1.1.2 ! root 81: #endif
1.1 root 82: struct {
83: Uint8 *base;
84: Uint8 *here;
85: Uint8 *stop;
86: } mem;
87: struct {
88: void *data1;
89: } unknown;
90: } hidden;
91:
92: } SDL_RWops;
93:
94:
95: /* Functions to create SDL_RWops structures from various data sources */
96:
97: extern DECLSPEC SDL_RWops * SDLCALL SDL_RWFromFile(const char *file, const char *mode);
98:
1.1.1.2 ! root 99: #ifdef HAVE_STDIO_H
1.1 root 100: extern DECLSPEC SDL_RWops * SDLCALL SDL_RWFromFP(FILE *fp, int autoclose);
1.1.1.2 ! root 101: #endif
1.1 root 102:
103: extern DECLSPEC SDL_RWops * SDLCALL SDL_RWFromMem(void *mem, int size);
104: extern DECLSPEC SDL_RWops * SDLCALL SDL_RWFromConstMem(const void *mem, int size);
105:
106: extern DECLSPEC SDL_RWops * SDLCALL SDL_AllocRW(void);
107: extern DECLSPEC void SDLCALL SDL_FreeRW(SDL_RWops *area);
108:
1.1.1.2 ! root 109: #define RW_SEEK_SET 0 /* Seek from the beginning of data */
! 110: #define RW_SEEK_CUR 1 /* Seek relative to current read point */
! 111: #define RW_SEEK_END 2 /* Seek relative to the end of data */
! 112:
1.1 root 113: /* Macros to easily read and write from an SDL_RWops structure */
114: #define SDL_RWseek(ctx, offset, whence) (ctx)->seek(ctx, offset, whence)
1.1.1.2 ! root 115: #define SDL_RWtell(ctx) (ctx)->seek(ctx, 0, RW_SEEK_CUR)
1.1 root 116: #define SDL_RWread(ctx, ptr, size, n) (ctx)->read(ctx, ptr, size, n)
117: #define SDL_RWwrite(ctx, ptr, size, n) (ctx)->write(ctx, ptr, size, n)
118: #define SDL_RWclose(ctx) (ctx)->close(ctx)
119:
120:
1.1.1.2 ! root 121: /* Read an item of the specified endianness and return in native format */
! 122: extern DECLSPEC Uint16 SDLCALL SDL_ReadLE16(SDL_RWops *src);
! 123: extern DECLSPEC Uint16 SDLCALL SDL_ReadBE16(SDL_RWops *src);
! 124: extern DECLSPEC Uint32 SDLCALL SDL_ReadLE32(SDL_RWops *src);
! 125: extern DECLSPEC Uint32 SDLCALL SDL_ReadBE32(SDL_RWops *src);
! 126: extern DECLSPEC Uint64 SDLCALL SDL_ReadLE64(SDL_RWops *src);
! 127: extern DECLSPEC Uint64 SDLCALL SDL_ReadBE64(SDL_RWops *src);
! 128:
! 129: /* Write an item of native format to the specified endianness */
! 130: extern DECLSPEC int SDLCALL SDL_WriteLE16(SDL_RWops *dst, Uint16 value);
! 131: extern DECLSPEC int SDLCALL SDL_WriteBE16(SDL_RWops *dst, Uint16 value);
! 132: extern DECLSPEC int SDLCALL SDL_WriteLE32(SDL_RWops *dst, Uint32 value);
! 133: extern DECLSPEC int SDLCALL SDL_WriteBE32(SDL_RWops *dst, Uint32 value);
! 134: extern DECLSPEC int SDLCALL SDL_WriteLE64(SDL_RWops *dst, Uint64 value);
! 135: extern DECLSPEC int SDLCALL SDL_WriteBE64(SDL_RWops *dst, Uint64 value);
! 136:
! 137:
1.1 root 138: /* Ends C function definitions when using C++ */
139: #ifdef __cplusplus
140: }
141: #endif
142: #include "close_code.h"
143:
1.1.1.2 ! root 144: #endif /* _SDL_rwops_h */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.