1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352
|
/*******************************************************************************
* 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
|