#ifndef LWSDK_HOST_H
#define LWSDK_HOST_H

/*
 * LWSDK Header File
 * Copyright 1999, NewTek, Inc.
 *
 * LWHOST.H -- LightWave Host Services
 *
 * This header contains the declarations for globals provided by all
 * LightWave host applications.
 */

#include <lwdialog.h>

/*
 * File Request Function.  This function is returned as the "File Request"
 * global service.  It gets a simple filename from the user.
 */
#define LWFILEREQFUNC_GLOBAL "File Request"

typedef int	LWFileReqFunc (	const char *hail, char *name,
							char *path, char *fullName, int buflen );

/*
 * File Request Activate Function.  This function is returned as the
 * "File Request 2" global service.  It takes a file request local struct
 * and version number and returns the activation code directly.
 */
#define LWFILEACTIVATEFUNC_GLOBAL "File Request 2"

typedef int	LWFileActivateFunc (int version, LWFileReqLocal *);


/*
 * Color Picker Activate Function.  This function is returned as the
 * "Color Picker" global service.  It takes a color picker local struct
 * and version number and returns the activation code directly.
 */
#define LWCOLORACTIVATEFUNC_GLOBAL "Color Picker"

typedef int	LWColorActivateFunc (int version, LWColorPickLocal *);

/*
 * File Type Function.  This function is returned as the "File Type Pattern"
 * global service.  It returns filename pattern strings given file type
 * code strings.
 */
#define LWFILETYPEFUNC_GLOBAL "File Type Pattern"

typedef const char * LWFileTypeFunc (const char *);

/*
 * Directory Function.  This function is returned as the "Directory Info"
 * global service.  It returns filename pattern strings given file type
 * code strings.
 */
#define LWDIRINFOFUNC_GLOBAL "Directory Info"

typedef const char * LWDirInfoFunc (const char *);

/*
 * These file type code strings are recognized by the File Type and Directory Info
 * Functions. They correspond with the current configuration for the system.
 */
#define LWFTYPE_CONTENT     "Content"
#define LWFTYPE_ANIMATION	"Animations"
#define LWFTYPE_IMAGE		"Images"
#define LWFTYPE_ENVELOPE	"Envelopes"
#define LWFTYPE_MOTION		"Motions"
#define LWFTYPE_OBJECT		"Objects"
#define LWFTYPE_PLUGIN		"Plug-ins"
#define LWFTYPE_PREVIEW		"Previews"
#define LWFTYPE_PSFONT		"PSFonts"
#define LWFTYPE_SCENE		"Scenes"
#define LWFTYPE_SETTING		"Settings"
#define LWFTYPE_SURFACE		"Surfaces"
#define LWFTYPE_NODES		"Nodes"
#define LWFTYPE_SOUNDS		"Sounds"
#define LWFTYPE_DYNAMICS	"Dynamics"
#define LWFTYPE_RIGS	    "Rigs"
#define LWFTYPE_INSTALL		"Install"
#define LWFTYPE_LIGHTS      "Lights"
#define LWFTYPE_RADIOSITY   "Radiosity"

/****
 * Message Functions.  This block of functions is returned as the
 * "Info Messages 2" global service.  They display various info
 * and other confirmation dialogs to the user. 
 * The return codes are as follows:
 *  OKCancel                     ok(1) cancel(0)
 *  YesNo                       yes(1) no(0)
 *  YesNoCancel           yes(2) no(1) cancel(0)
 *  YesNoAll    yesAll(3) yes(2) no(1) cancel(0)
 ****
 */
#define LWMESSAGEFUNCS_GLOBAL		"Info Messages 2"

typedef struct st_LWMessageFuncs
{
	void	(*info)     (const char *, const char *);
	void	(*error)    (const char *, const char *);
	void	(*warning)  (const char *, const char *);
	int		(*okCancel) (const char *ttl, const char *, const char *);
	int		(*yesNo)    (const char *ttl, const char *, const char *);
	int		(*yesNoCan) (const char *ttl, const char *, const char *);
	int		(*yesNoAll) (const char *ttl, const char *, const char *);

} LWMessageFuncs;

/*
 * System Information.  The value returned as the "System ID" global is
 * a value that should be parsed into bits.  The low bits are the dongle
 * serial number and the high bits are the application code.
 */
#define LWSYSTEMID_GLOBAL	"System ID"

#define LWSYS_TYPEBITS		0xF0000000
#define LWSYS_SERIALBITS	0x0FFFFFFF

#define LWSYS_LAYOUT		0x00000000
#define LWSYS_MODELER		0x10000000
#define LWSYS_SCREAMERNET	0x20000000
#define LWSYS_OTHER			0x80000000

/*
 * Product Information.  The value returned as the "Product Info" global
 * is a value that should be parsed into bits.  The various groups of
 * bits contain codes for the specific product and revision.
 */
#define LWPRODUCTINFO_GLOBAL	"Product Info"

#define LWINF_PRODUCT			0x0000000F
#define LWINF_BUILD				0x0000FFF0
#define LWINF_MINORREV			0x000F0000
#define LWINF_MAJORREV			0x00F00000
#define LWINF_RESERVED			0xFF000000

#define LWINF_PRODLWAV			0x00000001
#define LWINF_PRODINSP3D		0x00000002
#define LWINF_PRODOTHER			0x00000004

#define LWINF_GETMAJOR(x)		(((x) & LWINF_MAJORREV) >> 20)
#define LWINF_GETMINOR(x)		(((x) & LWINF_MINORREV) >> 16)
#define LWINF_GETBUILD(x)		(((x) & LWINF_BUILD)    >>  4)

/*
 * Locale Information.  The value returned as the "Locale Info" global
 * is a value whose low bits contain the locale ID for the host
 * application.  The possible values are the LANGID codes defined in
 * lwserver.
 */
#define LWLOCALEINFO_GLOBAL	"Locale Info"

#define LWLOC_LANGID            0x0000FFFF
#define LWLOC_RESERVED          0xFFFF0000

#endif
