/* static char *sccsid = "@(#)Xresource.h	1.12	ULTRIX	7/21/88"; */
/*
*****************************************************************************
**                                                                          *
**                         COPYRIGHT (c) 1988 BY                            *
**             DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.                *
**			   ALL RIGHTS RESERVED                              *
**                                                                          *
**  THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND  COPIED  *
**  ONLY  IN  ACCORDANCE  WITH  THE  TERMS  OF  SUCH  LICENSE AND WITH THE  *
**  INCLUSION OF THE ABOVE COPYRIGHT NOTICE.  THIS SOFTWARE OR  ANY  OTHER  *
**  COPIES  THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY  *
**  OTHER PERSON.  NO TITLE TO AND OWNERSHIP OF  THE  SOFTWARE  IS  HEREBY  *
**  TRANSFERRED.                                                            *
**                                                                          *
**  THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE  WITHOUT  NOTICE  *
**  AND  SHOULD  NOT  BE  CONSTRUED  AS  A COMMITMENT BY DIGITAL EQUIPMENT  *
**  CORPORATION.                                                            *
**                                                                          *
**  DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR  RELIABILITY  OF  ITS  *
**  SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DIGITAL.                 *
**                                                                          *
*****************************************************************************
**++
**  FACILITY:
**
**	< to be supplied >
**
**  ABSTRACT:
**
**	< to be supplied >
**
**  ENVIRONMENT:
**
**	< to be supplied >
**
**  MODIFICATION HISTORY:
**
**	< to be supplied >
**
**--
**/

/* $Header: Xresource.h,v 1.1 89/02/08 15:38:17 haynes Exp $ */

#ifndef _Xresource_h
#define _Xresource_h

/****************************************************************
 ****************************************************************
 ***                                                          ***
 ***                                                          ***
 ***          X Resource Manager Intrinsics                   ***
 ***                                                          ***
 ***                                                          ***
 ****************************************************************
 ****************************************************************/



/****************************************************************
 *
 * Miscellaneous definitions
 *
 ****************************************************************/

#ifdef VMS
#include	<types.h>
#include	<Xlib.h>
#else
#include	<sys/types.h>
#include	<X++/Xlib.h>
#define CADDR_T
#endif


#ifndef CADDR_T
typedef char * caddr_t;
#define CADDR_T
#endif

#ifndef NULL
#define NULL 0
#endif

/****************************************************************
 *
 * ||| Memory Management (move out of here!)
 *
 ****************************************************************/

extern char *Xpermalloc(unsigned int);

/****************************************************************
 *
 * Quark Management
 *
 ****************************************************************/

typedef int     XrmQuark, *XrmQuarkList;
#define NULLQUARK ((XrmQuark) 0)

typedef char *XrmString;
#define NULLSTRING ((XrmString) 0)

/* find quark for string, create new quark if none already exists */
extern XrmQuark XrmStringToQuark(XrmString);

/* find string for quark */
extern XrmString XrmQuarkToString(XrmQuark);

extern XrmQuark XrmUniqueQuark();

#define XrmStringsEqual(a1, a2) (strcmp(a1, a2) == 0)


/****************************************************************
 *
 * Name and Class lists.
 *
 ****************************************************************/

typedef XrmQuark     XrmName;
typedef XrmQuarkList XrmNameList;
#define XrmNameToString(name)		XrmQuarkToString(name)
#define XrmStringToName(string)		XrmStringToQuark(string)
#define XrmStringToNameList(str, name)	XrmStringToQuarkList(str, name)

typedef XrmQuark     XrmClass;
typedef XrmQuarkList XrmClassList;
#define XrmClassToString(class)		XrmQuarkToString(class)
#define XrmStringToClass(class)		XrmStringToQuark(class)
#define XrmStringToClassList(str,class)	XrmStringToQuarkList(str, class)



/****************************************************************
 *
 * Resource Representation Types and Values
 *
 ****************************************************************/

typedef XrmQuark     XrmRepresentation;
#define XrmStringToRepresentation(string)   XrmStringToQuark(string)
#define	XrmRepresentationToString(type)   XrmQuarkToString(type)

class XrmValue {
    unsigned int    size;
    caddr_t	    addr;
};

typedef XrmValue *XrmValuePtr;


/****************************************************************
 *
 * Resource Manager Functions
 *
 ****************************************************************/

typedef enum {XrmBindTightly, XrmBindLoosely} XrmBinding, *XrmBindingList;

class _XrmHashBucketRec;
typedef _XrmHashBucketRec *XrmHashBucket;
typedef XrmHashBucket *XrmHashTable;
typedef XrmHashTable XrmSearchList[];
typedef _XrmHashBucketRec *XrmDatabase;


extern void XrmInitialize();

extern void XrmQPutResource(XrmDatabase*, XrmBindingList, XrmQuarkList,
	XrmRepresentation, XrmValue*);

extern void XrmPutResource(XrmDatabase*, char*, char*, XrmValue*);

extern void XrmQPutStringResource(XrmDatabase*, XrmBindingList, XrmQuarkList, char*);

extern void XrmPutStringResource(XrmDatabase*, char*, char*);

extern void XrmPutLineResource(XrmDatabase*, char*);

extern  XrmQGetResource(XrmDatabase, XrmNameList, XrmClassList, XrmRepresentation*,
	XrmValue*);

extern Bool XrmGetResource(XrmDatabase, char*, char*, char*, XrmValue*);

extern Bool XrmQGetSearchList(XrmDatabase, XrmNameList, XrmClassList,
	XrmSearchList, int);

extern Bool XrmQGetSearchResource(XrmSearchList, XrmName, XrmClass, XrmRepresentation*,
	XrmValue*);

/****************************************************************
 *
 * Conversion of Strings to Lists
 *
 ****************************************************************/

extern void XrmStringToQuarkList(char*, XrmQuarkList);

extern void XrmStringToBindingQuarkList(char*, XrmBindingList, XrmQuarkList);


/****************************************************************
 *
 * Resource Database Management
 *
 ****************************************************************/

extern XrmDatabase XrmGetFileDatabase(char*);

extern XrmDatabase XrmGetStringDatabase(char*);

extern void XrmPutFileDatabase(XrmDatabase, char*);

extern void XrmMergeDatabases(XrmDatabase, XrmDatabase*);


/****************************************************************
 *
 * Command line option mapping to resource entries
 *
 ****************************************************************/

typedef enum {
    XrmoptionNoArg,	/* Value is specified in OptionDescRec.value	    */
    XrmoptionIsArg,     /* Value is the option string itself		    */
    XrmoptionStickyArg, /* Value is characters immediately following option */
    XrmoptionSepArg,    /* Value is next argument in argv		    */
    XrmoptionResArg,	/* Resource and value in next argument in argv      */
    XrmoptionSkipArg,   /* Ignore this option and the next argument in argv */
    XrmoptionSkipLine   /* Ignore this option and the rest of argv	    */
} XrmOptionKind;

class XrmOptionDescRec {
    char	    *option;	    /* Option abbreviation in argv	    */
    char	    *specifier;     /* Resource specifier		    */
    XrmOptionKind   argKind;	    /* Which style of option it is	    */
    caddr_t	    value;	    /* Value to provide if XrmoptionNoArg   */
};
typedef XrmOptionDescRec *XrmOptionDescList;

extern void XrmParseCommand(XrmDatabase*, XrmOptionDescList, int, char*, int*,
	char**);


#endif _Xresource_h
/* DON'T ADD STUFF AFTER THIS #endif */
