Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
4973 right-hear 1
/*
2
    SDL - Simple DirectMedia Layer
3
    Copyright (C) 1997-2004 Sam Lantinga
4
 
5
    This library is free software; you can redistribute it and/or
6
    modify it under the terms of the GNU Library General Public
7
    License as published by the Free Software Foundation; either
8
    version 2 of the License, or (at your option) any later version.
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
13
    Library General Public License for more details.
14
 
15
    You should have received a copy of the GNU Library General Public
16
    License along with this library; if not, write to the Free
17
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
18
 
19
    Sam Lantinga
20
    slouken@libsdl.org
21
*/
22
 
23
#ifdef SAVE_RCSID
24
static char rcsid =
25
 "@(#) $Id: SDL_rwops.h,v 1.7 2004/01/04 16:49:07 slouken Exp $";
26
#endif
27
 
28
/* This file provides a general interface for SDL to read and write
29
   data sources.  It can easily be extended to files, memory, etc.
30
*/
31
 
32
#ifndef _SDL_RWops_h
33
#define _SDL_RWops_h
34
 
35
#include 
36
 
37
#include "SDL_types.h"
38
 
39
#include "begin_code.h"
40
/* Set up for C function definitions, even when using C++ */
41
#ifdef __cplusplus
42
extern "C" {
43
#endif
44
 
45
/* This is the read/write operation structure -- very basic */
46
 
47
typedef struct SDL_RWops {
48
	/* Seek to 'offset' relative to whence, one of stdio's whence values:
49
		SEEK_SET, SEEK_CUR, SEEK_END
50
	   Returns the final offset in the data source.
51
	 */
52
	int (*seek)(struct SDL_RWops *context, int offset, int whence);
53
 
54
	/* Read up to 'num' objects each of size 'objsize' from the data
55
	   source to the area pointed at by 'ptr'.
56
	   Returns the number of objects read, or -1 if the read failed.
57
	 */
58
	int (*read)(struct SDL_RWops *context, void *ptr, int size, int maxnum);
59
 
60
	/* Write exactly 'num' objects each of size 'objsize' from the area
61
	   pointed at by 'ptr' to data source.
62
	   Returns 'num', or -1 if the write failed.
63
	 */
64
	int (*write)(struct SDL_RWops *context, const void *ptr, int size, int num);
65
 
66
	/* Close and free an allocated SDL_FSops structure */
67
	int (*close)(struct SDL_RWops *context);
68
 
69
	Uint32 type;
70
	union {
71
	    struct {
72
		int autoclose;
73
	 	FILE *fp;
74
	    } stdio;
75
	    struct {
76
		Uint8 *base;
77
	 	Uint8 *here;
78
		Uint8 *stop;
79
	    } mem;
80
	    struct {
81
		void *data1;
82
	    } unknown;
83
	} hidden;
84
 
85
} SDL_RWops;
86
 
87
 
88
/* Functions to create SDL_RWops structures from various data sources */
89
 
90
extern DECLSPEC SDL_RWops * SDLCALL SDL_RWFromFile(const char *file, const char *mode);
91
 
92
extern DECLSPEC SDL_RWops * SDLCALL SDL_RWFromFP(FILE *fp, int autoclose);
93
 
94
extern DECLSPEC SDL_RWops * SDLCALL SDL_RWFromMem(void *mem, int size);
95
extern DECLSPEC SDL_RWops * SDLCALL SDL_RWFromConstMem(const void *mem, int size);
96
 
97
extern DECLSPEC SDL_RWops * SDLCALL SDL_AllocRW(void);
98
extern DECLSPEC void SDLCALL SDL_FreeRW(SDL_RWops *area);
99
 
100
/* Macros to easily read and write from an SDL_RWops structure */
101
#define SDL_RWseek(ctx, offset, whence)	(ctx)->seek(ctx, offset, whence)
102
#define SDL_RWtell(ctx)			(ctx)->seek(ctx, 0, SEEK_CUR)
103
#define SDL_RWread(ctx, ptr, size, n)	(ctx)->read(ctx, ptr, size, n)
104
#define SDL_RWwrite(ctx, ptr, size, n)	(ctx)->write(ctx, ptr, size, n)
105
#define SDL_RWclose(ctx)		(ctx)->close(ctx)
106
 
107
 
108
/* Ends C function definitions when using C++ */
109
#ifdef __cplusplus
110
}
111
#endif
112
#include "close_code.h"
113
 
114
#endif /* _SDL_RWops_h */