/************************************************************************/
/* Copyright 1992 MBARI							*/
/************************************************************************/
/* $Header: /usr/tiburon/unix/gui/proto/RCS/ibc.h,v 1.1 1998/01/28 16:17:59 oreilly Exp $			*/
/* Summary  : Include file for IBC screens of New ROV User Interface	*/
/* Filename : ibc.h							*/
/* Author   : Bob Herlien (rah)						*/
/* Project  : New ROV							*/
/* $Revision: 1.1 $							*/
/* Created  : 10/29/92							*/
/************************************************************************/

#ifndef INCibch
#define INCibch		1

#define IBC_WIDTH		570
#define TOGGLE_BUTTON_HEIGHT	45
#define BUTTON_HEIGHT		60
#define INFO_LEFT_POS		40
#define INFO_RT_POS		60
#define	IBC_NSETS		4
#define	IBC_NGROUPS		4
#define BOARD_LABEL_HEIGHT	100
#define NUM_GF_CURRENTS		4

#define NULLI		((ibcItem *)0)
#define NULLID		((ibcItemDesc *)0)
#define NULLIS		((ibcItemSet *)0)

	/* upFlags	*/
#define UP_NONE			0	/* no consumer, no update	*/
#define UP_CONSUME		1	/* start & stop consumer	*/
#define UP_ALREADY_CONSUME	2	/* already a consumer of item	*/


/* Shamelessly stolen from the FD_SET stuff in  /usr/include/types.h */

#define	NBBY_G	8		/* number of bits in a byte */

typedef unsigned long	grp_mask;
#define NGRPBITS	(sizeof(grp_mask) * NBBY_G)	/* bits per mask */

typedef	struct grp_set {
	grp_mask	grp_bits[IBC_NGROUPS];
} grp_set;

#define	GRP_SET(n, p)	((p)->grp_bits[(n)/NGRPBITS] |= (1 << ((n) % NGRPBITS)))
#define	GRP_CLR(n, p)  ((p)->grp_bits[(n)/NGRPBITS] &= ~(1 << ((n) % NGRPBITS)))
#define	GRP_ISSET(n, p)	((p)->grp_bits[(n)/NGRPBITS] & (1 << ((n) % NGRPBITS)))
#define GRP_ZERO(p)	bzero((char *)(p), sizeof(*(p)))

/* End stolen stuff	*/


typedef struct				/********************************/
{					/* ibcItem - IBC Display Item	*/
    char	*label;			/* Label string			*/
    char	*dmname;		/* Data Mgr name for item	*/
    DM_Type	dmtype;			/* Type of Data Mgr item	*/
    DM_Num	dm_nels;		/* No. elements of type dmtype	*/
    Void	(*create)();		/* Creation routine		*/
    Void	(*update)();		/* Update routine - read & display*/
    Void	(*activate)();		/* Called when user changes item*/
    Void	(*modify)();		/* modifyVerify for TextFields	*/
    Nat32	upFlags;		/* Update flags			*/
    Int32	parm1;			/* Misc parm 1			*/
    Int32	parm2;			/* Misc parm 2			*/
    XtPointer	ptrparm;		/* Misc pointer parm		*/
    Int32	value;			/* Last value read		*/
					/* ---Filled in after create---	*/
    Widget	widget;			/* Main widget			*/
    Widget	auxWid1;		/* Secondary widget		*/
    Widget	auxWid2;		/* Tertiary widget		*/
    DM_Item	dmitem;			/* Data Manager item ID		*/
    Int32	grpBit;			/* Group bit number (0..63)	*/
} ibcItem;				/********************************/

typedef struct				/********************************/
{					/* IBC Item Set struct		*/
    ibcItem	*set_items;		/* Ptr to a set of items	*/
    Nat32	set_nitems;		/* Number of items in set	*/
    Widget	widget;			/* RowCol widget containing items*/
} ibcItemSet;				/********************************/

typedef struct				/********************************/
{					/* IBC Item Descriptor struct	*/
    ibcItemSet	*ibcSets[IBC_NSETS];	/* Sets of items		*/
					/* Entrys below filled in at init*/
    TimeOut	*timeout;		/* Timeout period		*/
    XtIntervalId timeoutId;		/* Timeout ID			*/
    DM_Group	grpId[IBC_NGROUPS];	/* DM Groups for ibcItems	*/
} ibcItemDesc;				/********************************/

typedef struct				/********************************/
{					/* ibcMenuItem - Option menu pane*/
    char	*label;			/* PushButton Label		*/
    Nat32	value;			/* Value to write to DM Item	*/
    Widget	widget;			/* Widget ID of the pushbutton	*/
} ibcMenuItem;				/********************************/

#endif /* INCibch */
