352 lines
16 KiB
C
352 lines
16 KiB
C
/*******************************************************************************
|
|
* povms.h
|
|
*
|
|
* This module contains all defines, typedefs, and prototypes for povms.cpp.
|
|
*
|
|
* ---------------------------------------------------------------------------
|
|
* Persistence of Vision Ray Tracer ('POV-Ray') version 3.7.
|
|
* Copyright 1991-2013 Persistence of Vision Raytracer Pty. Ltd.
|
|
*
|
|
* POV-Ray is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU Affero General Public License as
|
|
* published by the Free Software Foundation, either version 3 of the
|
|
* License, or (at your option) any later version.
|
|
*
|
|
* POV-Ray is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU Affero General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Affero General Public License
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
* ---------------------------------------------------------------------------
|
|
* POV-Ray is based on the popular DKB raytracer version 2.12.
|
|
* DKBTrace was originally written by David K. Buck.
|
|
* DKBTrace Ver 2.0-2.12 were written by David K. Buck & Aaron A. Collins.
|
|
* ---------------------------------------------------------------------------
|
|
* $File: //depot/public/povray/3.x/source/base/povms.h $
|
|
* $Revision: #1 $
|
|
* $Change: 6069 $
|
|
* $DateTime: 2013/11/06 11:59:40 $
|
|
* $Author: chrisc $
|
|
*******************************************************************************/
|
|
|
|
#ifndef POVMS_H
|
|
#define POVMS_H
|
|
|
|
#ifndef POVMS_NO_DUMP_SUPPORT
|
|
#include <stdio.h>
|
|
#endif
|
|
|
|
/*****************************************************************************
|
|
* Global preprocessor defines
|
|
******************************************************************************/
|
|
|
|
/* Note: This low level fatal error text output function is required.
|
|
It defaults to printf if you do not overload it in config.h! */
|
|
#ifndef POVMS_ASSERT_OUTPUT
|
|
#define POVMS_ASSERT_OUTPUT(s,f,l) fprintf(stderr, "POVMS_ASSERT failed in %s line %d: %s\n", f, (int)l, s)
|
|
#endif
|
|
|
|
#ifndef POVMS_LOG_OUTPUT
|
|
#define POVMS_LOG_OUTPUT(s)
|
|
#endif
|
|
|
|
/* Note: POVMSType needs to be 32 bit! (unsigned), it will be composed
|
|
of four characters, i.e. 'MyTp', 'any ', '4Mac', etc. */
|
|
#ifndef POVMSType
|
|
#define POVMSType unsigned int
|
|
#endif
|
|
|
|
#ifndef POVMSInt
|
|
#define POVMSInt int
|
|
#endif
|
|
|
|
#ifndef POVMSLong
|
|
#define POVMSLong long long
|
|
|
|
#define SetPOVMSLong(v,h,l) *v = (((((POVMSLong)(h)) & 0x00000000ffffffff) << 32) | (((POVMSLong)(l)) & 0x00000000ffffffff))
|
|
#define GetPOVMSLong(h,l,v) *h = ((v) >> 32) & 0x00000000ffffffff; *l = (v) & 0x00000000ffffffff
|
|
|
|
#define POVMSLongToCDouble(x) double(x)
|
|
#endif
|
|
|
|
#ifndef POVMSFloat
|
|
#define POVMSFloat float
|
|
#endif
|
|
|
|
#ifndef POVMSBool
|
|
#define POVMSBool int
|
|
#endif
|
|
|
|
#ifndef POVMSUCS2
|
|
#define POVMSUCS2 unsigned short
|
|
#endif
|
|
|
|
#ifndef POVMSStream
|
|
#define POVMSStream unsigned char
|
|
#endif
|
|
|
|
#ifndef POVMS_NO_ORDERED_STREAM_DATA
|
|
#ifndef POVMSIEEEFloat
|
|
#define POVMSIEEEFloat float
|
|
|
|
#define POVMSFloatToPOVMSIEEEFloat(p, f) f = p
|
|
#define POVMSIEEEFloatToPOVMSFloat(f, p) p = f
|
|
|
|
#define HexToPOVMSIEEEFloat(h, f) *((int *)(&f)) = h
|
|
#endif
|
|
#else
|
|
// POVMSIEEEFloat does not have to be an IEEE 754 float
|
|
// if POVMS_NO_ORDERED_STREAM_DATA is off. It only
|
|
// has to be 32 bit in size!
|
|
#ifndef POVMSIEEEFloat
|
|
#define POVMSIEEEFloat POVMSFloat
|
|
|
|
#define POVMSFloatToPOVMSIEEEFloat(p, f) f = p
|
|
#define POVMSIEEEFloatToPOVMSFloat(f, p) p = f
|
|
#endif
|
|
#endif
|
|
|
|
/* Note: POVMSAddress needs work with the default copy constructor.
|
|
Adjust it to fit you message addressing needs! */
|
|
|
|
#ifndef POVMSAddress
|
|
#define POVMSAddress void *
|
|
#define POVMSInvalidAddress NULL
|
|
#endif
|
|
|
|
/* Note: Use POVMS_EXPORT if you need a special export keyword
|
|
in order to use the POVMS functions as part of a library. */
|
|
#ifndef POVMS_EXPORT
|
|
#define POVMS_EXPORT
|
|
#endif
|
|
|
|
#ifndef POVMS_CDECL
|
|
#define POVMS_CDECL
|
|
#endif
|
|
|
|
#undef POVMS_VERSION
|
|
#define POVMS_VERSION 2
|
|
|
|
|
|
/*****************************************************************************
|
|
* Global typedefs
|
|
******************************************************************************/
|
|
|
|
/* Note: All only upper case types are reserved for internal use. */
|
|
enum
|
|
{
|
|
kPOVMSObjectClassID = 'OCLA',
|
|
kPOVMSMessageClassID = 'MCLA',
|
|
kPOVMSMessageIdentID = 'MIDE',
|
|
kPOVMSSourceAddressID = 'MSRC',
|
|
kPOVMSDestinationAddressID = 'MDST',
|
|
kPOVMSMessageTimeoutID = 'TOUT',
|
|
kPOVMSMessageErrorID = 'MERR',
|
|
kPOVMSMessageSequenceID = 'MSEQ',
|
|
kPOVMSResultSequenceID = 'RSEQ'
|
|
};
|
|
|
|
enum
|
|
{
|
|
kPOVMSType_Object = 'OBJE',
|
|
kPOVMSType_LockedObject = 'LOCK',
|
|
kPOVMSType_ResultObject = 'RESU',
|
|
kPOVMSType_Address = 'ADDR',
|
|
kPOVMSType_Null = 'NULL',
|
|
kPOVMSType_WildCard = '****',
|
|
kPOVMSType_CString = 'CSTR',
|
|
kPOVMSType_UCS2String = 'U2ST',
|
|
kPOVMSType_Int = 'INT4',
|
|
kPOVMSType_Long = 'INT8',
|
|
kPOVMSType_Float = 'FLT4',
|
|
kPOVMSType_Double = 'FLT8',
|
|
kPOVMSType_Bool = 'BOOL',
|
|
kPOVMSType_Type = 'TYPE',
|
|
kPOVMSType_List = 'LIST',
|
|
kPOVMSType_VectorInt = 'VIN4',
|
|
kPOVMSType_VectorLong = 'VIN8',
|
|
kPOVMSType_VectorFloat = 'VFL4',
|
|
kPOVMSType_VectorType = 'VTYP',
|
|
};
|
|
|
|
typedef void * POVMSContext;
|
|
|
|
typedef struct POVMSData POVMSObject;
|
|
typedef struct POVMSData POVMSAttribute;
|
|
typedef struct POVMSData POVMSAttributeList;
|
|
|
|
typedef POVMSObject *POVMSObjectPtr;
|
|
typedef POVMSAttribute *POVMSAttributePtr;
|
|
typedef POVMSAttributeList *POVMSAttributeListPtr;
|
|
|
|
typedef struct POVMSNode POVMSNode;
|
|
|
|
struct POVMSData
|
|
{
|
|
POVMSType type;
|
|
int size;
|
|
union
|
|
{
|
|
void *ptr;
|
|
struct POVMSData *items;
|
|
struct POVMSNode *root;
|
|
};
|
|
};
|
|
|
|
struct POVMSNode
|
|
{
|
|
struct POVMSNode *last;
|
|
struct POVMSNode *next;
|
|
POVMSType key;
|
|
struct POVMSData data;
|
|
};
|
|
|
|
enum
|
|
{
|
|
kPOVMSSendMode_Invalid = 0,
|
|
kPOVMSSendMode_NoReply = 1,
|
|
kPOVMSSendMode_WaitReply = 2,
|
|
kPOVMSSendMode_WantReceipt = 3
|
|
};
|
|
|
|
|
|
/*****************************************************************************
|
|
* Global variables
|
|
******************************************************************************/
|
|
|
|
|
|
/*****************************************************************************
|
|
* Global functions
|
|
******************************************************************************/
|
|
|
|
// POVMS context functions
|
|
POVMS_EXPORT int POVMS_CDECL POVMS_OpenContext (POVMSContext *contextrefptr);
|
|
POVMS_EXPORT int POVMS_CDECL POVMS_CloseContext (POVMSContext contextref);
|
|
POVMS_EXPORT int POVMS_CDECL POVMS_GetContextAddress(POVMSContext contextref, POVMSAddress *addrptr);
|
|
|
|
// Message receive handler functions
|
|
POVMS_EXPORT int POVMS_CDECL POVMS_InstallReceiver (POVMSContext contextref, int (*hfunc)(POVMSObjectPtr, POVMSObjectPtr, int, void *), POVMSType hclass, POVMSType hid, void *hpd);
|
|
POVMS_EXPORT int POVMS_CDECL POVMS_RemoveReceiver (POVMSContext contextref, POVMSType hclass, POVMSType hid);
|
|
|
|
// Message receive functions
|
|
POVMS_EXPORT int POVMS_CDECL POVMS_ProcessMessages (POVMSContext contextref, POVMSBool blocking, POVMSBool yielding);
|
|
POVMS_EXPORT int POVMS_CDECL POVMS_Receive (POVMSContext contextref, POVMSObjectPtr msg, POVMSObjectPtr result, int mode);
|
|
|
|
// Message send functions
|
|
POVMS_EXPORT int POVMS_CDECL POVMS_Send (POVMSContext contextref, POVMSObjectPtr msg, POVMSObjectPtr result, int mode);
|
|
|
|
// Message data functions
|
|
POVMS_EXPORT int POVMS_CDECL POVMSMsg_SetupMessage (POVMSObjectPtr object, POVMSType msgclass, POVMSType msgid);
|
|
POVMS_EXPORT int POVMS_CDECL POVMSMsg_GetMessageClass (POVMSObjectPtr object, POVMSType *msgclass);
|
|
POVMS_EXPORT int POVMS_CDECL POVMSMsg_SetMessageClass (POVMSObjectPtr object, POVMSType msgclass);
|
|
POVMS_EXPORT int POVMS_CDECL POVMSMsg_GetMessageIdentifier (POVMSObjectPtr object, POVMSType *msgid);
|
|
POVMS_EXPORT int POVMS_CDECL POVMSMsg_SetMessageIdentifier (POVMSObjectPtr object, POVMSType msgid);
|
|
POVMS_EXPORT int POVMS_CDECL POVMSMsg_GetSourceAddress (POVMSObjectPtr object, POVMSAddress *value);
|
|
POVMS_EXPORT int POVMS_CDECL POVMSMsg_SetSourceAddress (POVMSObjectPtr object, POVMSAddress value);
|
|
POVMS_EXPORT int POVMS_CDECL POVMSMsg_GetDestinationAddress (POVMSObjectPtr object, POVMSAddress *value);
|
|
POVMS_EXPORT int POVMS_CDECL POVMSMsg_SetDestinationAddress (POVMSObjectPtr object, POVMSAddress value);
|
|
|
|
// Object functions
|
|
POVMS_EXPORT int POVMS_CDECL POVMSObject_New (POVMSObjectPtr object, POVMSType objclass);
|
|
POVMS_EXPORT int POVMS_CDECL POVMSObject_Delete (POVMSObjectPtr object);
|
|
POVMS_EXPORT int POVMS_CDECL POVMSObject_Copy (POVMSObjectPtr sourceobject, POVMSObjectPtr destobject);
|
|
POVMS_EXPORT int POVMS_CDECL POVMSObject_Merge (POVMSObjectPtr sourceobject, POVMSObjectPtr destobject);
|
|
POVMS_EXPORT int POVMS_CDECL POVMSObject_Get (POVMSObjectPtr object, POVMSAttributePtr attr, POVMSType key);
|
|
POVMS_EXPORT int POVMS_CDECL POVMSObject_Set (POVMSObjectPtr object, POVMSAttributePtr attr, POVMSType key);
|
|
POVMS_EXPORT int POVMS_CDECL POVMSObject_Remove (POVMSObjectPtr object, POVMSType key);
|
|
POVMS_EXPORT int POVMS_CDECL POVMSObject_Exist (POVMSObjectPtr object, POVMSType key);
|
|
POVMS_EXPORT int POVMS_CDECL POVMSObject_Count (POVMSObjectPtr object, int *cnt);
|
|
POVMS_EXPORT int POVMS_CDECL POVMSObject_GetClass (POVMSObjectPtr object, POVMSType *objclass);
|
|
|
|
#ifndef POVMS_NO_DUMP_SUPPORT
|
|
// Object debug functions
|
|
POVMS_EXPORT int POVMS_CDECL POVMSObject_Dump (FILE *file, POVMSObjectPtr object);
|
|
POVMS_EXPORT int POVMS_CDECL POVMSObject_DumpAttr (FILE *file, POVMSAttributePtr attr);
|
|
#endif
|
|
|
|
// Object streaming functions
|
|
POVMS_EXPORT int POVMS_CDECL POVMSObjectStream_Size (POVMSObjectPtr object, int *streamsize);
|
|
POVMS_EXPORT int POVMS_CDECL POVMSObjectStream_Read (POVMSObjectPtr object, POVMSStream *stream, int *maxstreamsize);
|
|
POVMS_EXPORT int POVMS_CDECL POVMSObjectStream_Write(POVMSObjectPtr object, POVMSStream *stream, int *maxstreamsize);
|
|
|
|
// Attribute functions
|
|
POVMS_EXPORT int POVMS_CDECL POVMSAttr_New (POVMSAttributePtr attr);
|
|
POVMS_EXPORT int POVMS_CDECL POVMSAttr_Delete (POVMSAttributePtr attr);
|
|
POVMS_EXPORT int POVMS_CDECL POVMSAttr_Copy (POVMSAttributePtr sourceattr, POVMSAttributePtr destattr);
|
|
POVMS_EXPORT int POVMS_CDECL POVMSAttr_Get (POVMSAttributePtr attr, POVMSType type, void *data, int *maxdatasize);
|
|
POVMS_EXPORT int POVMS_CDECL POVMSAttr_Set (POVMSAttributePtr attr, POVMSType type, const void *data, int datasize);
|
|
POVMS_EXPORT int POVMS_CDECL POVMSAttr_Size (POVMSAttributePtr attr, int *size);
|
|
POVMS_EXPORT int POVMS_CDECL POVMSAttr_Type (POVMSAttributePtr attr, POVMSType *type);
|
|
|
|
// Attribute list functions
|
|
POVMS_EXPORT int POVMS_CDECL POVMSAttrList_New (POVMSAttributeListPtr attr);
|
|
POVMS_EXPORT int POVMS_CDECL POVMSAttrList_Delete (POVMSAttributeListPtr attr);
|
|
POVMS_EXPORT int POVMS_CDECL POVMSAttrList_Copy (POVMSAttributeListPtr sourcelist, POVMSAttributeListPtr destlist);
|
|
POVMS_EXPORT int POVMS_CDECL POVMSAttrList_Append (POVMSAttributeListPtr attr, POVMSAttributePtr item);
|
|
POVMS_EXPORT int POVMS_CDECL POVMSAttrList_AppendN (POVMSAttributeListPtr attr, int cnt, POVMSAttributePtr item);
|
|
POVMS_EXPORT int POVMS_CDECL POVMSAttrList_Remove (POVMSAttributeListPtr attr);
|
|
POVMS_EXPORT int POVMS_CDECL POVMSAttrList_GetNth (POVMSAttributeListPtr attr, int index, POVMSAttributePtr item);
|
|
POVMS_EXPORT int POVMS_CDECL POVMSAttrList_SetNth (POVMSAttributeListPtr attr, int index, POVMSAttributePtr item);
|
|
POVMS_EXPORT int POVMS_CDECL POVMSAttrList_RemoveNth(POVMSAttributeListPtr attr, int index);
|
|
POVMS_EXPORT int POVMS_CDECL POVMSAttrList_Clear (POVMSAttributeListPtr attr);
|
|
POVMS_EXPORT int POVMS_CDECL POVMSAttrList_Count (POVMSAttributeListPtr attr, int *cnt);
|
|
|
|
// Utility functions
|
|
POVMS_EXPORT int POVMS_CDECL POVMSUtil_SetString (POVMSObjectPtr object, POVMSType key, const char *str); // Note: Strings may not contain \0 characters codes!
|
|
POVMS_EXPORT int POVMS_CDECL POVMSUtil_SetUCS2String(POVMSObjectPtr object, POVMSType key, const POVMSUCS2 *str); // Note: Strings may not contain \0 characters codes!
|
|
POVMS_EXPORT int POVMS_CDECL POVMSUtil_SetInt (POVMSObjectPtr object, POVMSType key, POVMSInt value);
|
|
POVMS_EXPORT int POVMS_CDECL POVMSUtil_SetLong (POVMSObjectPtr object, POVMSType key, POVMSLong value);
|
|
POVMS_EXPORT int POVMS_CDECL POVMSUtil_SetFloat (POVMSObjectPtr object, POVMSType key, POVMSFloat value);
|
|
POVMS_EXPORT int POVMS_CDECL POVMSUtil_SetBool (POVMSObjectPtr object, POVMSType key, POVMSBool boolvalue);
|
|
POVMS_EXPORT int POVMS_CDECL POVMSUtil_SetType (POVMSObjectPtr object, POVMSType key, POVMSType typevalue);
|
|
POVMS_EXPORT int POVMS_CDECL POVMSUtil_GetStringLength(POVMSObjectPtr object, POVMSType key, int *len); // Note: Includes trailing \0 character code!
|
|
POVMS_EXPORT int POVMS_CDECL POVMSUtil_GetString (POVMSObjectPtr object, POVMSType key, char *str, int *maxlen);
|
|
POVMS_EXPORT int POVMS_CDECL POVMSUtil_GetUCS2StringLength(POVMSObjectPtr object, POVMSType key, int *len); // Note: Includes trailing \0 character code!
|
|
POVMS_EXPORT int POVMS_CDECL POVMSUtil_GetUCS2String(POVMSObjectPtr object, POVMSType key, POVMSUCS2 *str, int *maxlen);
|
|
POVMS_EXPORT int POVMS_CDECL POVMSUtil_GetInt (POVMSObjectPtr object, POVMSType key, POVMSInt *value);
|
|
POVMS_EXPORT int POVMS_CDECL POVMSUtil_GetLong (POVMSObjectPtr object, POVMSType key, POVMSLong *value);
|
|
POVMS_EXPORT int POVMS_CDECL POVMSUtil_GetFloat (POVMSObjectPtr object, POVMSType key, POVMSFloat *value);
|
|
POVMS_EXPORT int POVMS_CDECL POVMSUtil_GetBool (POVMSObjectPtr object, POVMSType key, POVMSBool *boolvalue);
|
|
POVMS_EXPORT int POVMS_CDECL POVMSUtil_GetType (POVMSObjectPtr object, POVMSType key, POVMSType *typevalue);
|
|
POVMS_EXPORT int POVMS_CDECL POVMSUtil_TempAlloc (void **ptr, int datasize);
|
|
POVMS_EXPORT int POVMS_CDECL POVMSUtil_TempFree (void *ptr);
|
|
|
|
// Memory debug functions
|
|
#ifdef _DEBUG_POVMS_TRACE_MEMORY_
|
|
POVMS_EXPORT int POVMS_TraceDump ();
|
|
#endif
|
|
|
|
#endif /* POVMS_H */
|
|
|
|
#ifdef POVMSCPP_H
|
|
#define POVMS_EXPORT_STREAM_FUNCTIONS
|
|
#endif
|
|
|
|
// Stream functions only available to the C++ interface
|
|
#ifdef POVMS_EXPORT_STREAM_FUNCTIONS
|
|
|
|
// Stream reading functions
|
|
POVMS_EXPORT int POVMS_CDECL POVMSStream_ReadString (char *data, POVMSStream *stream, int datasize, int *maxstreamsize);
|
|
POVMS_EXPORT int POVMS_CDECL POVMSStream_ReadUCS2String (POVMSUCS2 *data, POVMSStream *stream, int datasize, int *maxstreamsize);
|
|
POVMS_EXPORT int POVMS_CDECL POVMSStream_ReadInt (POVMSInt *data, POVMSStream *stream, int *maxstreamsize);
|
|
POVMS_EXPORT int POVMS_CDECL POVMSStream_ReadLong (POVMSLong *data, POVMSStream *stream, int *maxstreamsize);
|
|
POVMS_EXPORT int POVMS_CDECL POVMSStream_ReadFloat (POVMSFloat *data, POVMSStream *stream, int *maxstreamsize);
|
|
POVMS_EXPORT int POVMS_CDECL POVMSStream_ReadType (POVMSType *data, POVMSStream *stream, int *maxstreamsize);
|
|
POVMS_EXPORT int POVMS_CDECL POVMSStream_Read (struct POVMSData *data, POVMSStream *stream, int *maxstreamsize);
|
|
|
|
// Stream writing functions
|
|
POVMS_EXPORT int POVMS_CDECL POVMSStream_WriteString (const char *data, POVMSStream *stream, int *maxstreamsize);
|
|
POVMS_EXPORT int POVMS_CDECL POVMSStream_WriteUCS2String (const POVMSUCS2 *data, POVMSStream *stream, int *maxstreamsize);
|
|
POVMS_EXPORT int POVMS_CDECL POVMSStream_WriteInt (POVMSInt data, POVMSStream *stream, int *maxstreamsize);
|
|
POVMS_EXPORT int POVMS_CDECL POVMSStream_WriteLong (POVMSLong data, POVMSStream *stream, int *maxstreamsize);
|
|
POVMS_EXPORT int POVMS_CDECL POVMSStream_WriteFloat (POVMSFloat data, POVMSStream *stream, int *maxstreamsize);
|
|
POVMS_EXPORT int POVMS_CDECL POVMSStream_WriteType (POVMSType data, POVMSStream *stream, int *maxstreamsize);
|
|
POVMS_EXPORT int POVMS_CDECL POVMSStream_Write (struct POVMSData *data, POVMSStream *stream, int *maxstreamsize);
|
|
|
|
// Stream utility functions
|
|
POVMS_EXPORT int POVMS_CDECL POVMSStream_Size (struct POVMSData *data);
|
|
POVMS_EXPORT int POVMS_CDECL POVMSStream_CheckMessageHeader (POVMSStream *stream, int streamsize, int *totalsize);
|
|
|
|
#endif
|