|
Packit |
3ff832 |
/******************************************************************
|
|
Packit |
3ff832 |
Copyright 1993, 1994 by Digital Equipment Corporation, Maynard, Massachusetts,
|
|
Packit |
3ff832 |
|
|
Packit |
3ff832 |
All Rights Reserved
|
|
Packit |
3ff832 |
|
|
Packit |
3ff832 |
Permission to use, copy, modify, and distribute this software and its
|
|
Packit |
3ff832 |
documentation for any purpose and without fee is hereby granted,
|
|
Packit |
3ff832 |
provided that the above copyright notice appear in all copies and that
|
|
Packit |
3ff832 |
both that copyright notice and this permission notice appear in
|
|
Packit |
3ff832 |
supporting documentation, and that the names of Digital or MIT not be
|
|
Packit |
3ff832 |
used in advertising or publicity pertaining to distribution of the
|
|
Packit |
3ff832 |
software without specific, written prior permission.
|
|
Packit |
3ff832 |
|
|
Packit |
3ff832 |
DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
|
|
Packit |
3ff832 |
ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
|
|
Packit |
3ff832 |
DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
|
|
Packit |
3ff832 |
ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
|
|
Packit |
3ff832 |
WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
|
|
Packit |
3ff832 |
ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
|
|
Packit |
3ff832 |
SOFTWARE.
|
|
Packit |
3ff832 |
|
|
Packit |
3ff832 |
Author: Hiroyuki Miyamoto Digital Equipment Corporation
|
|
Packit |
3ff832 |
miyamoto@jrd.dec.com
|
|
Packit |
3ff832 |
|
|
Packit |
3ff832 |
This version tidied and debugged by Steve Underwood May 1999
|
|
Packit |
3ff832 |
|
|
Packit |
3ff832 |
******************************************************************/
|
|
Packit |
3ff832 |
|
|
Packit |
3ff832 |
#ifndef FRAMEMGR_H
|
|
Packit |
3ff832 |
#define FRAMEMGR_H
|
|
Packit |
3ff832 |
|
|
Packit |
3ff832 |
#include <X11/Xmd.h>
|
|
Packit |
3ff832 |
#include <X11/Xlib.h>
|
|
Packit |
3ff832 |
#include <stdio.h>
|
|
Packit |
3ff832 |
|
|
Packit |
3ff832 |
#if defined(VAXC) && !defined(__DECC)
|
|
Packit |
3ff832 |
#define xim_externalref globalref
|
|
Packit |
3ff832 |
#define xim_externaldef globaldef
|
|
Packit |
3ff832 |
#else
|
|
Packit |
3ff832 |
#define xim_externalref extern
|
|
Packit |
3ff832 |
#define xim_externaldef
|
|
Packit |
3ff832 |
#endif
|
|
Packit |
3ff832 |
|
|
Packit |
3ff832 |
/* Definitions for FrameMgr */
|
|
Packit |
3ff832 |
|
|
Packit |
3ff832 |
#define COUNTER_MASK 0x10
|
|
Packit |
3ff832 |
|
|
Packit |
3ff832 |
typedef enum
|
|
Packit |
3ff832 |
{
|
|
Packit |
3ff832 |
BIT8 = 0x1, /* {CARD8* | INT8*} */
|
|
Packit |
3ff832 |
BIT16 = 0x2, /* {CARD16* | INT16*} */
|
|
Packit |
3ff832 |
BIT32 = 0x3, /* {CARD32* | INT32*} */
|
|
Packit |
3ff832 |
BIT64 = 0x4, /* {CARD64* | INT64*} */
|
|
Packit |
3ff832 |
BARRAY = 0x5, /* int*, void* */
|
|
Packit |
3ff832 |
ITER = 0x6, /* int* */
|
|
Packit |
3ff832 |
POINTER = 0x7, /* specifies next item is a PTR_ITEM */
|
|
Packit |
3ff832 |
PTR_ITEM = 0x8, /* specifies the item has a pointer */
|
|
Packit |
3ff832 |
/* BOGUS - POINTER and PTR_ITEM
|
|
Packit |
3ff832 |
* In the current implementation, PTR_ITEM should be lead by
|
|
Packit |
3ff832 |
* POINTER. But actually, it's just redundant logically. Someone
|
|
Packit |
3ff832 |
* may remove this redundancy and POINTER from the enum member but he
|
|
Packit |
3ff832 |
* should also modify the logic in FrameMgr program.
|
|
Packit |
3ff832 |
*/
|
|
Packit |
3ff832 |
PADDING = 0x9, /* specifies that a padding is needed.
|
|
Packit |
3ff832 |
* This requires extra data in data field.
|
|
Packit |
3ff832 |
*/
|
|
Packit |
3ff832 |
EOL = 0xA, /* specifies the end of list */
|
|
Packit |
3ff832 |
|
|
Packit |
3ff832 |
COUNTER_BIT8 = COUNTER_MASK | 0x1,
|
|
Packit |
3ff832 |
COUNTER_BIT16 = COUNTER_MASK | 0x2,
|
|
Packit |
3ff832 |
COUNTER_BIT32 = COUNTER_MASK | 0x3,
|
|
Packit |
3ff832 |
COUNTER_BIT64 = COUNTER_MASK | 0x4
|
|
Packit |
3ff832 |
} XimFrameType;
|
|
Packit |
3ff832 |
|
|
Packit |
3ff832 |
/* Convenient macro */
|
|
Packit |
3ff832 |
#define _FRAME(a) {a, NULL}
|
|
Packit |
3ff832 |
#define _PTR(p) {PTR_ITEM, (void *)p}
|
|
Packit |
3ff832 |
/* PADDING's usage of data field
|
|
Packit |
3ff832 |
* B15-B8 : Shows the number of effective items.
|
|
Packit |
3ff832 |
* B7-B0 : Shows padding unit. ex) 04 shows 4 unit padding.
|
|
Packit |
3ff832 |
*/
|
|
Packit |
3ff832 |
#define _PAD2(n) {PADDING, (void*)((n)<<8|2)}
|
|
Packit |
3ff832 |
#define _PAD4(n) {PADDING, (void*)((n)<<8|4)}
|
|
Packit |
3ff832 |
|
|
Packit |
3ff832 |
#define FmCounterByte 0
|
|
Packit |
3ff832 |
#define FmCounterNumber 1
|
|
Packit |
3ff832 |
|
|
Packit |
3ff832 |
#define _BYTE_COUNTER(type, offset) \
|
|
Packit |
3ff832 |
{(COUNTER_MASK|type), (void*)((offset)<<8|FmCounterByte)}
|
|
Packit |
3ff832 |
|
|
Packit |
3ff832 |
#define _NUMBER_COUNTER(type, offset) \
|
|
Packit |
3ff832 |
{(COUNTER_MASK|type), (void*)((offset)<<8|FmCounterNumber)}
|
|
Packit |
3ff832 |
|
|
Packit |
3ff832 |
typedef struct _XimFrame
|
|
Packit |
3ff832 |
{
|
|
Packit |
3ff832 |
XimFrameType type;
|
|
Packit |
3ff832 |
void* data; /* For PTR_ITEM and PADDING */
|
|
Packit |
3ff832 |
} XimFrameRec, *XimFrame;
|
|
Packit |
3ff832 |
|
|
Packit |
3ff832 |
typedef enum
|
|
Packit |
3ff832 |
{
|
|
Packit |
3ff832 |
FmSuccess,
|
|
Packit |
3ff832 |
FmEOD,
|
|
Packit |
3ff832 |
FmInvalidCall,
|
|
Packit |
3ff832 |
FmBufExist,
|
|
Packit |
3ff832 |
FmCannotCalc,
|
|
Packit |
3ff832 |
FmNoMoreData
|
|
Packit |
3ff832 |
} FmStatus;
|
|
Packit |
3ff832 |
|
|
Packit |
3ff832 |
typedef struct _FrameMgr *FrameMgr;
|
|
Packit |
3ff832 |
|
|
Packit |
3ff832 |
FrameMgr FrameMgrInit(XimFrame frame, char* area, Bool byte_swap);
|
|
Packit |
3ff832 |
void FrameMgrInitWithData(FrameMgr fm, XimFrame frame, void* area,
|
|
Packit |
3ff832 |
Bool byte_swap);
|
|
Packit |
3ff832 |
void FrameMgrFree(FrameMgr fm);
|
|
Packit |
3ff832 |
FmStatus FrameMgrSetBuffer(FrameMgr, void*);
|
|
Packit |
3ff832 |
FmStatus _FrameMgrPutToken(FrameMgr, void*, int);
|
|
Packit |
3ff832 |
FmStatus _FrameMgrGetToken(FrameMgr, void*, int);
|
|
Packit |
3ff832 |
FmStatus FrameMgrSetSize(FrameMgr, int);
|
|
Packit |
3ff832 |
FmStatus FrameMgrSetIterCount(FrameMgr, int);
|
|
Packit |
3ff832 |
FmStatus FrameMgrSetTotalSize(FrameMgr, int);
|
|
Packit |
3ff832 |
int FrameMgrGetTotalSize(FrameMgr);
|
|
Packit |
3ff832 |
int FrameMgrGetSize(FrameMgr);
|
|
Packit |
3ff832 |
FmStatus FrameMgrSkipToken(FrameMgr, int);
|
|
Packit |
3ff832 |
void FrameMgrReset(FrameMgr);
|
|
Packit |
3ff832 |
Bool FrameMgrIsIterLoopEnd(FrameMgr, FmStatus*);
|
|
Packit |
3ff832 |
|
|
Packit |
3ff832 |
#define FrameMgrPutToken(fm, obj) _FrameMgrPutToken((fm), &(obj), sizeof(obj))
|
|
Packit |
3ff832 |
#define FrameMgrGetToken(fm, obj) _FrameMgrGetToken((fm), &(obj), sizeof(obj))
|
|
Packit |
3ff832 |
|
|
Packit |
3ff832 |
#endif /* FRAMEMGR_H */
|