mirror of
git://xwords.git.sourceforge.net/gitroot/xwords/xwords
synced 2024-12-30 10:26:58 +01:00
136 lines
4.4 KiB
C
136 lines
4.4 KiB
C
/* -*-mode: C; fill-column: 78; c-basic-offset: 4; -*- */
|
|
/*
|
|
* Copyright 1997 - 2000 by Eric House (fixin@peak.org). All rights reserved.
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License
|
|
* as published by the Free Software Foundation; either version 2
|
|
* of the License, or (at your option) any later version.
|
|
*
|
|
* This program 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 General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
*/
|
|
|
|
#ifndef _XWSTREAM_H_
|
|
#define _XWSTREAM_H_
|
|
|
|
#include "comtypes.h"
|
|
/* #include "xptypes.h" */
|
|
|
|
#define START_OF_STREAM 0
|
|
#define END_OF_STREAM -1
|
|
|
|
typedef XP_U32 XWStreamPos; /* low 3 bits are bit offset; rest byte offset */
|
|
enum { POS_READ, POS_WRITE };
|
|
typedef XP_U8 PosWhich;
|
|
|
|
typedef struct StreamCtxVTable {
|
|
void (*m_stream_destroy)( XWStreamCtxt* dctx );
|
|
|
|
XP_U8 (*m_stream_getU8)( XWStreamCtxt* dctx );
|
|
void (*m_stream_getBytes)( XWStreamCtxt* dctx, void* where,
|
|
XP_U16 count );
|
|
XP_U16 (*m_stream_getU16)( XWStreamCtxt* dctx );
|
|
XP_U32 (*m_stream_getU32)( XWStreamCtxt* dctx );
|
|
XP_U32 (*m_stream_getBits)( XWStreamCtxt* dctx, XP_U16 nBits );
|
|
|
|
void (*m_stream_putU8)( XWStreamCtxt* dctx, XP_U8 byt );
|
|
void (*m_stream_putBytes)( XWStreamCtxt* dctx, void* whence,
|
|
XP_U16 count );
|
|
void (*m_stream_putU16)( XWStreamCtxt* dctx, XP_U16 data );
|
|
void (*m_stream_putU32)( XWStreamCtxt* dctx, XP_U32 data );
|
|
void (*m_stream_putBits)( XWStreamCtxt* dctx, XP_U16 nBits, XP_U32 bits );
|
|
|
|
void (*m_stream_copyFromStream)( XWStreamCtxt* dctx, XWStreamCtxt* src,
|
|
XP_U16 nBytes );
|
|
|
|
XWStreamPos (*m_stream_getPos)( XWStreamCtxt* dctx, PosWhich which );
|
|
XWStreamPos (*m_stream_setPos)( XWStreamCtxt* dctx, XWStreamPos newpos,
|
|
PosWhich which );
|
|
|
|
void (*m_stream_open)( XWStreamCtxt* dctx );
|
|
void (*m_stream_close)( XWStreamCtxt* dctx );
|
|
|
|
XP_U16 (*m_stream_getSize)( XWStreamCtxt* dctx );
|
|
|
|
/* void (*m_stream_makeReturnAddr)( XWStreamCtxt* dctx, XP_PlayerAddr* addr, */
|
|
/* XP_U16* addrLen ); */
|
|
|
|
XP_PlayerAddr (*m_stream_getAddress)( XWStreamCtxt* dctx );
|
|
void (*m_stream_setAddress)( XWStreamCtxt* dctx, XP_PlayerAddr channelNo );
|
|
|
|
} StreamCtxVTable;
|
|
|
|
|
|
struct XWStreamCtxt {
|
|
StreamCtxVTable* vtable;
|
|
};
|
|
|
|
|
|
#define stream_destroy(sc) \
|
|
(sc)->vtable->m_stream_destroy(sc)
|
|
|
|
#define stream_getU8(sc) \
|
|
(sc)->vtable->m_stream_getU8(sc)
|
|
|
|
#define stream_getBytes(sc, wh, c ) \
|
|
(sc)->vtable->m_stream_getBytes((sc), (wh), (c))
|
|
|
|
#define stream_getU16(sc) \
|
|
(sc)->vtable->m_stream_getU16(sc)
|
|
|
|
#define stream_getU32(sc) \
|
|
(sc)->vtable->m_stream_getU32(sc)
|
|
|
|
#define stream_getBits(sc, n) \
|
|
(sc)->vtable->m_stream_getBits((sc), (n))
|
|
|
|
#define stream_putU8(sc, b) \
|
|
(sc)->vtable->m_stream_putU8((sc), (b))
|
|
|
|
#define stream_putBytes( sc, w, c ) \
|
|
(sc)->vtable->m_stream_putBytes((sc), (w), (c))
|
|
|
|
#define stream_putU16(sc, d) \
|
|
(sc)->vtable->m_stream_putU16((sc), (d))
|
|
|
|
#define stream_putU32(sc, d) \
|
|
(sc)->vtable->m_stream_putU32((sc), (d))
|
|
|
|
#define stream_putBits(sc, n, b) \
|
|
(sc)->vtable->m_stream_putBits((sc), (n), (b))
|
|
|
|
#define stream_copyFromStream( sc, src, nb ) \
|
|
(sc)->vtable->m_stream_copyFromStream((sc), (src), (nb))
|
|
|
|
#define stream_getPos(sc, w) \
|
|
(sc)->vtable->m_stream_getPos((sc), (w))
|
|
|
|
#define stream_setPos(sc, p, w) \
|
|
(sc)->vtable->m_stream_setPos((sc), (p), (w))
|
|
|
|
#define stream_open(sc) \
|
|
(sc)->vtable->m_stream_open((sc))
|
|
|
|
#define stream_close(sc) \
|
|
(sc)->vtable->m_stream_close((sc))
|
|
|
|
#define stream_getSize(sc) \
|
|
(sc)->vtable->m_stream_getSize((sc))
|
|
|
|
#define stream_makeReturnAddr(sc,addr,len) \
|
|
(sc)->vtable->m_stream_makeReturnAddr((sc),(addr),(len))
|
|
|
|
#define stream_getAddress(sc) \
|
|
(sc)->vtable->m_stream_getAddress((sc))
|
|
|
|
#define stream_setAddress(sc,ch) \
|
|
(sc)->vtable->m_stream_setAddress((sc),(ch))
|
|
|
|
#endif /* _XWSTREAM_H_ */
|