Mercurial > repos > rhope
diff datum.h @ 0:76568becd6d6
Rhope Alpha 2a source import
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Tue, 28 Apr 2009 23:06:07 +0000 |
parents | |
children | 23dd9c766699 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/datum.h Tue Apr 28 23:06:07 2009 +0000 @@ -0,0 +1,161 @@ +#ifndef _DATUM_H_ +#define _DATUM_H_ + +#include "vis_threading.h" +#include "debugmacros.h" + +/* +Old Datum structure +typedef struct +{ + unsigned char type;//0=String,1=Bool,2=Int32,3=UInt32,4=Float, bit 7 = dynamically allocated (i.e. call free when datum is freed) + int len; + void * contents; +} datum; +*/ + +//Support structs for new datum structure +#ifdef CPLUSPLUS +extern "C" { +#endif +#ifndef PROGRAM_STRUCT_DECLARED_ +#define PROGRAM_STRUCT_DECLARED_ +//icky hack until I figure out a better one +//defined in both datum.h and structs.h ugh + +typedef struct +{ + char filename[512]; + struct defchunk * defs; + struct defchunk * current; + //struct worker_def * deflist; + //int num_defs; + //int defs_storage; + struct company * companylist; + int num_companies; + int companies_storage; + int refcount; + VIS_CRITICAL_SECTION(lock) +} program; + +#endif + +typedef struct +{ + unsigned int len; + void * data; +} generic_data; +typedef struct +{ + int num_a; + int num_b; +} two_ints; +//New datum structure +typedef struct +{ + //unsigned short type; + struct company * company; + unsigned char union_type; + union + { + generic_data generic; + two_ints integers; + double real; + } c; + int ref_count; + VIS_CRITICAL_SECTION(lock) +} datum; + +#define DATUMS_PER_STORAGE 512 +typedef struct datum_storage +{ + datum datums[DATUMS_PER_STORAGE]; + unsigned short available; + unsigned char inuse[DATUMS_PER_STORAGE/8]; + int num; + struct datum_storage * next; +} datum_storage; +#define CHECK_INUSE(storage, index, subindex) ((storage->inuse[index]) & (1 << (subindex))) +#define SET_INUSE(storage, index) (storage->inuse[index >> 3] |= (1 << (index & 7))) +#define CLEAR_INUSE(storage, index) (storage->inuse[index >> 3] &= ~(1 << (index & 7))) + +datum * new_datum(unsigned short type, unsigned char union_type, int generic_len, program * prog); +datum * add_ref(datum * adatum); +void release_ref(datum * adatum); +void datum_set_yesno(datum * adatum, int val); +void init_datum_storage(); +datum * copy_datum(datum * adatum, int newsize); +#ifdef CPLUSPLUS +} +#endif + +#define DATUM_YES 1 +#define DATUM_NO 0 + +#define BUILTIN_TYPE_SCREEN_CUSTOM 17 +#define BUILTIN_TYPE_CUSTOM_WIDGET 16 +#define BUILTIN_TYPE_CHECKBOX 20 +#define BUILTIN_TYPE_DROPDOWN 21 +#ifdef GUI_LIB + #ifdef SYLLABLE + #define USER_DEFINED_TYPES 22 + #define BUILTIN_TYPE_BLUEPRINT 19 + #define BUILTIN_TYPE_BUFFER 18 + #else + #define USER_DEFINED_TYPES 18 + #define BUILTIN_TYPE_BLUEPRINT 17 + #define BUILTIN_TYPE_BUFFER 16 + #endif + #define BUILTIN_TYPE_PROGRAM 15 + #define BUILTIN_TYPE_GLOBAL_STORE 14 + #define BUILTIN_TYPE_NETCLIENT 13 +#else + #ifdef SEGA + #define USER_DEFINED_TYPES 12 + #define BUILTIN_TYPE_BLUEPRINT 11 + #define BUILTIN_TYPE_BUFFER 10 + #define BUILTIN_TYPE_PROGRAM 9 + #define BUILTIN_TYPE_GLOBAL_STORE 8 + #else + #ifdef NO_NET + #define USER_DEFINED_TYPES 13 + #define BUILTIN_TYPE_BLUEPRINT 12 + #define BUILTIN_TYPE_BUFFER 11 + #define BUILTIN_TYPE_PROGRAM 10 + #define BUILTIN_TYPE_GLOBAL_STORE 9 + #else + #define USER_DEFINED_TYPES 14 + #define BUILTIN_TYPE_BLUEPRINT 13 + #define BUILTIN_TYPE_BUFFER 12 + #define BUILTIN_TYPE_PROGRAM 11 + #define BUILTIN_TYPE_GLOBAL_STORE 10 + #endif + #endif + #define BUILTIN_TYPE_NETCLIENT 9 +#endif +#define BUILTIN_TYPE_INPUTBOX 12 +#define BUILTIN_TYPE_BUTTON 11 +#define BUILTIN_TYPE_WINDOW_SHOWN 10 +#define BUILTIN_TYPE_WINDOW 9 +#ifdef SEGA + #define BUILTIN_TYPE_WORKER 7 +#else + #define BUILTIN_TYPE_WORKER 8 +#endif //SEGA +#define BUILTIN_TYPE_FILE 7 +#define BUILTIN_TYPE_DICT 6 +#define BUILTIN_TYPE_LIST 5 +#define BUILTIN_TYPE_REAL 4 +#define BUILTIN_TYPE_WHOLE 3 +#define BUILTIN_TYPE_STRING 2 +#define BUILTIN_TYPE_YESNO 1 +#define ANY_TYPE 0 + +#endif //_DATUM_H_ + + + + + + +