Blame util/IMdkit/FrameMgr.h

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 */