|
|
1.1 ! root 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: [email protected] ! 21: */ ! 22: ! 23: #ifdef SAVE_RCSID ! 24: static char rcsid = ! 25: "@(#) $Id: SDL_rwops.h,v 1.1.1.1 2005/11/18 23:23:31 rswindell 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 <stdio.h> ! 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 (SDLCALL *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 (SDLCALL *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 (SDLCALL *write)(struct SDL_RWops *context, const void *ptr, int size, int num); ! 65: ! 66: /* Close and free an allocated SDL_FSops structure */ ! 67: int (SDLCALL *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 */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.