2dabb75fdf6ea2317220140a1da602bf3e3b25c3
[sdk] / bindings / c / eC.h
1 // Preprocessor directives can be added at the beginning (Can't store them in AST)
2
3 /****************************************************************************
4 ===========================================================================
5    Core eC Library
6 ===========================================================================
7 ****************************************************************************/
8 #if !defined(__EC_H__)
9 #define __EC_H__
10
11 #define CPP11 (defined(__cplusplus) && __cplusplus >= 201103L)
12
13 #ifdef __cplusplus
14 extern "C"
15 {
16 #endif
17
18 #include <stdint.h>
19 #include <stdio.h>
20 #include <string.h>
21
22 // Syntactic Sugar (NOT GENERATED)
23 #define $(x)      (constString)getTranslatedString(MODULE_NAME, x, null)
24 #define $$(x, c)  (constString)getTranslatedString(MODULE_NAME, x, c)
25
26 #define _IPTR(x, c, s) ((struct s *)((x) ? (((char *)(x)) + c->offset) : 0))
27 #define IPTR(x, c) _IPTR(x, class_ ## c, c)
28
29 #define incref(x) (x)->_refCount++;
30
31 #define newi(c) ({ Instance i = Instance_new(c); incref(i); i; })
32 #ifndef __cplusplus
33    #define new(t, c) eC_new(class_ ## t->structSize * c)
34 #endif
35 #define newb(c) eC_new(c)
36
37 #define deletei(v) Instance_decref(v), v = null
38 #ifndef __cplusplus
39    #define delete(v) eC_delete(v), v = null
40 #endif
41
42 #ifndef __cplusplus
43    #define registerClass(a, n, b)  \
44       eC_registerClass(normalClass, #n, #b, sizeof(struct n), 0, \
45          (void *)n ## _constructor, (void *)n ## _destructor, a, privateAccess, publicAccess)
46 #endif
47
48 #define addMethod(c, n, m) \
49    Class_addMethod(c, n, null, (void *)m, publicAccess)
50
51 #if defined(__WIN32__) && !defined(__CONSOLE_APP__)
52    typedef void * HINSTANCE;
53    #define WINAPI __stdcall
54    #define MAIN_DECLARATION int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst, char * cmdLine, int show)
55    #define eC_init_CALL eC_init(true, 0, null)
56 #else
57    #define MAIN_DECLARATION int main(int argc, char * argv[])
58    #ifdef __cplusplus
59       #if defined(__CONSOLE_APP__)
60          #define eC_init_CALL eC_init(false, null, null);
61       #else
62          #define eC_init_CALL eC_init(true, null, null);
63       #endif
64    #else
65       #if defined(__CONSOLE_APP__)
66          #define eC_init_CALL eC_init(false, argc, argv);
67       #else
68          #define eC_init_CALL eC_init(true, argc, argv);
69       #endif
70    #endif
71 #endif
72
73 #define APP_INTRO \
74    MAIN_DECLARATION \
75    { \
76       eC_Application app = eC_init_CALL;
77
78 #define APP_OUTRO \
79       int exitCode = _IPTR(app, class_Application, class_members_Application)->exitCode; \
80       deletei(app); \
81       return exitCode; \
82    }
83
84 // GENERATED:
85
86 #define Instance           eC_Instance
87 #define Module             eC_Module
88 #define Application        eC_Application
89 #define Container          eC_Container
90 #define Array              eC_Array
91 #define CustomAVLTree      eC_CustomAVLTree
92 #define AVLTree            eC_AVLTree
93 #define Map                eC_Map
94 #define LinkList           eC_LinkList
95 #define List               eC_List
96 #define IOChannel          eC_IOChannel
97 #define SerialBuffer       eC_SerialBuffer
98 #define OldArray           eC_OldArray
99
100 #define Window             eC_Window
101 #define ClassDesignerBase  eC_ClassDesignerBase
102 #define DesignerBase       eC_DesignerBase
103
104 // Structs / Unions (with methods or properties)
105 #define Iterator           eC_Iterator
106 #define MapIterator        eC_MapIterator
107 #define BuiltInContainer   eC_BuiltInContainer
108 #define BinaryTree         eC_BinaryTree
109 #define StringBinaryTree   eC_StringBinaryTree
110 #define OldList            eC_OldList
111
112 // class : struct (with methods or properties)
113 #define Class              eC_Class
114 #define BTNode             eC_BTNode
115 #define Item               eC_Item
116 #define OldLink            eC_OldLink
117 #define AVLNode            eC_AVLNode
118 #define MapNode            eC_MapNode
119 #define StringBTNode       eC_StringBTNode
120
121 // Defines
122 #if defined(__cplusplus)
123 #define null 0
124 #else
125 #define null (void *)0
126 #endif
127
128 // dllimport Functions
129 #define eC_initApp               __ecereNameSpace__ecere__com____ecere_COM_Initialize
130 #define eC_findClass             __ecereNameSpace__ecere__com__eSystem_FindClass
131 #define eC_registerClass         __ecereNameSpace__ecere__com__eSystem_RegisterClass
132 #define eC_new                   __ecereNameSpace__ecere__com__eSystem_New
133 #define eC_new0                  __ecereNameSpace__ecere__com__eSystem_New0
134 #define eC_delete                __ecereNameSpace__ecere__com__eSystem_Delete
135 #define eC_findFunction          __ecereNameSpace__ecere__com__eSystem_FindFunction
136
137 #define Class_addMethod          __ecereNameSpace__ecere__com__eClass_AddMethod
138 #define Class_findMethod         __ecereNameSpace__ecere__com__eClass_FindMethod
139 #define Class_findProperty       __ecereNameSpace__ecere__com__eClass_FindProperty
140 #define Class_isDerived          __ecereNameSpace__ecere__com__eClass_IsDerived
141
142 #define Module_load              __ecereNameSpace__ecere__com__eModule_Load
143
144 #define Instance_new             __ecereNameSpace__ecere__com__eInstance_New
145 #define Instance_delete          __ecereNameSpace__ecere__com__eInstance_Delete
146 #define Instance_decref          __ecereNameSpace__ecere__com__eInstance_DecRef
147 #define Instance_evolve          __ecereNameSpace__ecere__com__eInstance_Evolve
148 #define Instance_setMethod       __ecereNameSpace__ecere__com__eInstance_SetMethod
149
150 #define getTranslatedString      __ecereNameSpace__ecere__GetTranslatedString
151 #define loadTranslatedStrings    __ecereNameSpace__ecere__LoadTranslatedStrings
152 #define unloadTranslatedStrings  __ecereNameSpace__ecere__UnloadTranslatedStrings
153
154 // Virtual Method Calls
155
156 // Base Class
157 #define _onDisplay(c, i, s, x, y, w, d, a, f) ({ void (* method)(eC_Class *, void *, eC_Surface, int, int, int, void *, Alignment, DataDisplayFlags) = (void (*)(eC_Class *, void *, eC_Surface, int, int, int, void *, Alignment, DataDisplayFlags))((c) ? (c)->_vTbl : class_class->_vTbl)[onDisplay_vTblID]; \
158                                                 method ? method((c), i, s, x, y, w, d, a, f) : 1; })
159 #define _onCompare(c, i, o)                   ({ int (* method)(eC_Class *, void *, void *) = (int (*)(eC_Class *, void *, void *))((c) ? (c)->_vTbl : class_class->_vTbl)[onCompare_vTblID]; \
160                                                 method ? method((c), i, o) : 1; })
161 #define _onCopy(c, i, co, o)                  ({ void (* method)(eC_Class *, void *, eC_Class *, void *) = (void (*)(eC_Class *, void *, eC_Class *, void *))((c) ? (c)->_vTbl : class_class->_vTbl)[onCopy_vTblID]; \
162                                                 method ? method((c), i, co, o) : 1; })
163 #define _onFree(c, i)                         ({ void (* method)(eC_Class *, void *) = (void (*)(eC_Class *, void *))((c) ? (c)->_vTbl : class_class->_vTbl)[onFree_vTblID]; \
164                                                 method ? method((c), i) : 1; })
165 #define _onGetString(c, i, t, d, n)           ({ constString (* method)(eC_Class *, void *, char *, void *, bool *) = (constString (*)(eC_Class *, void *, char *, void *, bool *))((c) ? (c)->_vTbl : class_class->_vTbl)[onGetString_vTblID]; \
166                                                 method ? method((c), i, t, d, n) : null; })
167 #define _onGetDataFromString(c, i, s)         ({ bool (* method)(eC_Class *, void *, constString) = (bool (*)(eC_Class *, void *, constString))((c) ? (c)->_vTbl : class_class->_vTbl)[onGetDataFromString_vTblID]; \
168                                                 method ? method((c), i, s) : 1; })
169 #define _onEdit(c, i, b, o, x, y, w, h, u)    ({ eC_Window (* method)(eC_Class *, void *, DataBox, DataBox, int, int, int, int, void *) = (eC_Window (*)(eC_Class *, void *, DataBox, DataBox, int, int, int, int, void *))((c) ? (c)->_vTbl : class_class->_vTbl)[onEdit_vTblID]; \
170                                                 method ? method((c), i, b, i, x, y, w, h, u) : 1; })
171 #define _onSerialize(c, i, s)                 ({ void (* method)(eC_Class *, void *, eC_IOChannel) = (void (*)(eC_Class *, void *, eC_IOChannel))((c) ? (c)->_vTbl : class_class->_vTbl)[onSerialize_vTblID]; \
172                                                 method ? method((c), i, s) : 1; })
173 #define _onUnserialize(c, i, s)               ({ void (* method)(eC_Class *, void *, eC_IOChannel) = (void (*)(eC_Class *, void *, eC_IOChannel))((c) ? (c)->_vTbl : class_class->_vTbl)[onUnserialize_vTblID]; \
174                                                 method ? method((c), i, s) : 1; })
175 #define _onSaveEdit(c, i, w, o)               ({ bool (* method)(eC_Class *, void *, eC_Window, void *) = (bool (*)(eC_Class *, void *, eC_Window, void *))((c) ? (c)->_vTbl : class_class->_vTbl)[onSaveEdit_vTblID]; \
176                                                 method ? method((c), i, w, o) : 1; })
177
178 // Base Virtual Methods for Normal Classes
179 #define Instance_onDisplay(c, i, s, x, y, w, d, a, f)  _onDisplay(i ? i->_class : c, i, s, x, y, w, d, a, f)
180 #define Instance_onCompare(c, i, o)                    _onCompare(i ? i->_class : c, i, o)
181 #define Instance_onCopy(c, i, co, o)                   _onCopy(c, &i, co, o)
182 #define Instance_onFree(c, i)                          _onFree(i ? i->_class : c, i)
183 #define Instance_onGetString(c, i, t, d, n)            _onGetString(i ? i->_class : c, i, t, d, n)
184 #define Instance_onGetDataFromString(c, i, s)          _onGetDataFromString(c, &i, s)
185 #define Instance_onEdit(c, i, b, o, x, y, w, h, u)     _onEdit(i ? i->_class : c, i, b, o, x, y, w, h, u)
186 #define Instance_onSerialize(c, i, s)                  _onSerialize(i ? i->_class : c, i, s)
187 #define Instance_onUnserialize(c, i, s)                _onUnserialize(c, &i, s)
188 #define Instance_onSaveEdit(c, i, w, o)                _onSaveEdit(c, &i, w, o)
189
190 // Application Class
191 #define Application_main(x)   ({ eC_Application i = x; \
192                                  void (* method)(eC_Application) = (void (*)(eC_Application))(i ? i->_vTbl : class_Application->_vTbl)[Application_main_vTblID]; \
193                                  if(method) method(i); })
194
195 // Container Class
196 #define Container_getFirst(i)                ({ void (* method)(Container) = ((i) ? (i)->_vTbl : class_Container->_vTbl)[Container_getFirst_vTblID]; \
197                                                 return method ? method((i)) : null; })
198 #define Container_getLast(i)
199 #define Container_getPrev(i, p)
200 #define Container_getNext(i, p)
201 #define Container_getData(i, p)
202 #define Container_setData(i, p, d)
203 #define Container_getAtPosition(i, p, c, j)
204 #define Container_insert(i, a, v)
205 #define Container_add(i, v)
206 #define Container_remove(i, t)
207 #define Container_move(i, t, a)
208 #define Container_removeAll(i)
209 #define Container_copy(i, s)
210 #define Container_find(i, v)
211 #define Container_freeIterator(i, t)
212 #define Container_getCount(i)
213 #define Container_free(i)
214 #define Container_deleteItem(i, t)
215 #define Container_takeOut(i, d)
216
217
218 // class : struct forward declarations
219 struct BTNamedLink;
220 struct BitMember;
221 struct Class;
222 struct ClassProperty;
223 struct ClassTemplateParameter;
224 struct DataMember;
225 struct DefinedExpression;
226 struct EnumClassData;
227 struct GlobalFunction;
228 union ListItem;
229 struct Link;
230 struct NamedLink;
231 struct NamedLink64;
232 struct Method;
233 struct AVLNode;
234 struct MapNode;
235 struct Property;
236 struct ObjectInfo;
237 struct SubModule;
238 struct BTNode;
239 struct Item;
240 struct NamedItem;
241 struct OldLink;
242 struct StringBTNode;
243
244 typedef void IteratorPointer;
245 typedef void Mutex;
246
247 #ifndef __cplusplus
248 // class : struct typedefs
249 typedef struct BTNamedLink BTNamedLink;
250 typedef struct BitMember BitMember;
251 typedef struct Class Class;
252 typedef struct ClassProperty ClassProperty;
253 typedef struct ClassTemplateParameter ClassTemplateParameter;
254 typedef struct DataMember DataMember;
255 typedef struct DefinedExpression DefinedExpression;
256 typedef struct EnumClassData EnumClassData;
257 typedef struct GlobalFunction GlobalFunction;
258 typedef union ListItem ListItem;
259 typedef struct Link Link;
260 typedef struct NamedLink NamedLink;
261 typedef struct NamedLink64 NamedLink64;
262 typedef struct Method Method;
263 typedef struct AVLNode AVLNode;
264 typedef struct MapNode MapNode;
265 typedef struct Property Property;
266 typedef struct ObjectInfo ObjectInfo;
267 typedef struct SubModule SubModule;
268 typedef struct BTNode BTNode;
269 typedef struct Item Item;
270 typedef struct NamedItem NamedItem;
271 typedef struct OldLink OldLink;
272 typedef struct StringBTNode StringBTNode;
273 #endif
274
275 // Unit Class Typedefs
276 typedef uint8_t byte;
277 typedef int64_t int64;
278 typedef intptr_t intptr;
279 typedef ssize_t intsize;
280 typedef uint32_t uint;
281 typedef uint16_t uint16;
282 typedef uint32_t uint32;
283 typedef uint64_t uint64;
284 typedef uintptr_t uintptr;
285 typedef size_t uintsize;
286 typedef uint32_t unichar;
287 typedef double Angle;
288
289 // Normal Class Typedefs
290 struct class_members_Instance;
291
292 typedef struct class_members_Instance * Instance;
293 typedef Instance Module;
294 typedef Module Application;
295 typedef Instance Container;
296 typedef Container Array;
297 typedef Container CustomAVLTree;
298 typedef CustomAVLTree AVLTree;
299 typedef CustomAVLTree Map;
300 typedef Container LinkList;
301 typedef LinkList List;
302 typedef Instance IOChannel;
303 typedef IOChannel SerialBuffer;
304 typedef Instance OldArray;
305
306 typedef Instance Window;
307 typedef Window ClassDesignerBase;
308 typedef Window DesignerBase;
309
310 // String Type
311 typedef char * String;
312 typedef const char * constString;
313
314 // Undefined classes
315 typedef void * Type;
316 typedef void * Instantiation;
317 typedef void * ClassDefinition;
318
319 // Bit Class Typedefs
320 typedef uint32 Color;
321 typedef uint32 Modifiers;
322
323 // Enum Typedefs
324 #if defined(__cplusplus)
325    #define bool eC_bool
326 #elif defined(bool)
327    #undef bool
328    #define REDEFINE_STDBOOL
329    #define bool eC_bool
330 #endif
331 typedef uint32 bool;
332
333 #if !defined(__cplusplus)
334 typedef enum ClassType ClassType;
335 typedef enum ImportType ImportType;
336 typedef enum AccessMode AccessMode;
337 typedef enum DataMemberType DataMemberType;
338 typedef enum MethodType MethodType;
339 typedef enum Platform Platform;
340 typedef enum TemplateMemberType TemplateMemberType;
341 typedef enum TemplateParameterType TemplateParameterType;
342 typedef enum TreePrintStyle TreePrintStyle;
343 #endif
344
345 #if !CPP11
346 typedef uint32 BackSlashEscaping;
347 #endif
348
349 // Template Types Typedefs
350 typedef uint64 Container_D;
351 typedef uint64 Container_I;
352 typedef uint64 Container_T;
353
354 typedef AVLNode * CustomAVLTree_BT;
355 typedef uint64 CustomAVLTree_KT;
356
357 typedef uint64 AVLNode_T;
358 typedef uint64 Array_T;
359
360 typedef void * LinkElement_T;
361 typedef void * LinkList_LT;
362
363 typedef uint64 MapNode_V;
364
365 // Enumerations
366 #if !defined(__bool_true_false_are_defined) && !defined(__cplusplus)
367 enum boolean
368 {
369    false = 0,
370    true = 1
371 };
372 #endif
373
374 enum BackSlashEscaping
375 #if CPP11
376    : uint32
377 #endif
378 { forArgsPassing = 2 };
379
380 enum Platform { unknown, win32, tux, apple };
381
382 enum TemplateMemberType { dataMember, method, prop };
383 enum TemplateParameterType { type, identifier, expression };
384 enum TreePrintStyle { inOrder, postOrder, preOrder, depthOrder };
385
386 enum ClassType
387 {
388    normalClass,
389    structClass,
390    bitClass,
391    unitClass,
392    enumClass,
393    noHeadClass
394 };
395
396 enum MethodType { normalMethod, virtualMethod };
397
398 enum ImportType
399 {
400    normalImport,
401    staticImport,
402    remoteImport
403 };
404
405 enum AccessMode
406 {
407    defaultAccess,
408    publicAccess,
409    privateAccess,
410    staticAccess,
411    baseSystemAccess
412 };
413
414 enum DataMemberType
415 {
416    normalMember,
417    unionMember,
418    structMember
419 };
420
421 // Struct Typedefs
422 #ifndef __cplusplus
423    typedef union DataValue DataValue;
424    typedef struct Size Size;
425    typedef struct Point Point;
426    typedef struct Iterator Iterator;
427    typedef struct MapIterator MapIterator;
428    typedef struct BuiltInContainer BuiltInContainer;
429    typedef union ClassTemplateArgument ClassTemplateArgument;
430    typedef struct LinkElement LinkElement;
431    typedef struct NameSpace NameSpace;
432    typedef struct StaticString StaticString;
433    typedef struct BinaryTree BinaryTree;
434    typedef struct StringBinaryTree StringBinaryTree;
435    typedef struct OldList OldList;
436 #endif
437
438 // Structs / Unions
439 struct StaticString
440 {
441    char string[1];
442 };
443
444 union DataValue
445 {
446    char c;
447    byte uc;
448    short s;
449    uint16 us;
450    int i;
451    uint32 ui;
452    void * p;
453    float f;
454    double d;
455    int64 i64;
456    uint64 ui64;
457 };
458
459 struct BuiltInContainer
460 {
461    void *_vTbl;
462    Class * _class;
463    int _refCount;
464    void *data;
465    int count;
466    Class * type;
467 };
468
469 struct BinaryTree
470 {
471    BTNode * root;
472    int count;
473 };
474
475 struct OldList
476 {
477    void *first;
478    void *last;
479    int count;
480    uint offset;
481    bool circ;
482 };
483
484 struct NameSpace
485 {
486    const char *name;
487    NameSpace * btParent;
488    NameSpace * left;
489    NameSpace * right;
490    int depth;
491    NameSpace * parent;
492    BinaryTree nameSpaces;
493    BinaryTree classes;
494    BinaryTree defines;
495    BinaryTree functions;
496 };
497
498 struct Iterator
499 {
500    Container container;
501    IteratorPointer * pointer;
502 };
503
504 struct MapIterator
505 {
506    Map map;
507    IteratorPointer * pointer;
508 };
509 struct LinkElement
510 {
511    LinkElement_T prev;
512    LinkElement_T next;
513 };
514
515 union ClassTemplateArgument
516 {
517    // For type
518    struct
519    {
520       constString dataTypeString;
521       Class * dataTypeClass;
522    };
523    DataValue expression;
524    // For identifier
525    struct
526    {
527       constString memberString;
528       union
529       {
530          DataMember * member;
531          Property * prop;
532          Method * method;
533       };
534    };
535 };
536
537 // class : struct
538 struct BTNamedLink
539 {
540    const char *name;
541    BTNamedLink * parent;
542    BTNamedLink * left;
543    BTNamedLink * right;
544    int depth;
545    void *data;
546 };
547 struct BitMember
548 {
549    BitMember * prev;
550    BitMember * next;
551    const char *name;
552    bool isProperty;
553    AccessMode memberAccess;
554    int id;
555    Class * _class;
556    const char *dataTypeString;
557    Class * dataTypeClass;
558    Type dataType;
559    DataMemberType type;
560    int size;
561    int pos;
562    uint64 mask;
563 };
564
565 struct Class
566 {
567    Class * prev;
568    Class * next;
569    const char *name;
570    int offset;
571    int structSize;
572    void **_vTbl;
573    int vTblSize;
574    bool (*Constructor)(void *);
575    void (*Destructor)(void *);
576
577    int offsetClass;
578    int sizeClass;
579    Class * base;
580    BinaryTree methods;
581    BinaryTree members;
582    BinaryTree prop;
583    OldList membersAndProperties;
584    BinaryTree classProperties;
585    OldList derivatives;
586    int memberID;
587    int startMemberID;
588    ClassType type;
589    Module module;
590    NameSpace * nameSpace;
591    const char *dataTypeString;
592    Type dataType;
593    void (*Initialize)();
594    int typeSize;
595    int defaultAlignment;
596    int memberOffset;
597    OldList selfWatchers;
598    const char *designerClass;
599    bool noExpansion;
600    const char *defaultProperty;
601    bool comRedefinition;
602    int count;
603    int isRemote;
604    bool internalDecl;
605    void *data;
606    bool computeSize;
607    short structAlignment;
608    short pointerAlignment;
609    int destructionWatchOffset;
610    bool fixed;
611    OldList delayedCPValues;
612    AccessMode inheritanceAccess;
613    const char *fullName;
614    void *symbol;
615    OldList conversions;
616    OldList templateParams;
617    ClassTemplateArgument * templateArgs;
618    Class * templateClass;
619    OldList templatized;
620    int numParams;
621    bool isInstanceClass;
622    bool byValueSystemClass;
623 };
624 struct ClassProperty
625 {
626    const char *name;
627    ClassProperty * parent;
628    ClassProperty * left;
629    ClassProperty * right;
630    int depth;
631    const char *dataTypeString;
632    Type dataType;
633    bool constant;
634 };
635 struct ClassTemplateParameter
636 {
637    ClassTemplateParameter * prev;
638    ClassTemplateParameter * next;
639    const char *name;
640    TemplateParameterType type;
641    ClassTemplateArgument defaultArg;
642    void *param;
643 };
644 struct EnumClassData
645 {
646    OldList values;
647    int64 largest;
648 };
649 struct DataMember
650 {
651    DataMember * prev;
652    DataMember * next;
653    const char *name;
654    bool isProperty;
655    AccessMode memberAccess;
656    int id;
657    Class * _class;
658    const char *dataTypeString;
659    Class * dataTypeClass;
660    Type dataType;
661    DataMemberType type;
662    int offset;
663    int memberID;
664    OldList members;
665    BinaryTree membersAlpha;
666    int memberOffset;
667    short structAlignment;
668    short pointerAlignment;
669 };
670 struct DefinedExpression
671 {
672    DefinedExpression * prev;
673    DefinedExpression * next;
674    const char * name;
675    const char * value;
676    NameSpace * nameSpace;
677 };
678 struct GlobalFunction
679 {
680    GlobalFunction * prev;
681    GlobalFunction * next;
682    const char *name;
683    int (*function)();
684    Module module;
685    NameSpace * nameSpace;
686    const char *dataTypeString;
687    Type dataType;
688    void *symbol;
689 };
690 union ListItem
691 {
692    LinkElement link;
693    struct { ListItem * prev, * next; };
694 };
695
696 struct Link
697 {
698    LinkElement link;
699    struct { Link * prev, * next; };
700    uint64 data;
701 };
702 struct Method
703 {
704    const char *name;
705    Method * parent;
706    Method * left;
707    Method * right;
708    int depth;
709    int (*function)();
710    int vid;
711    MethodType type;
712    Class * _class;
713    void *symbol;
714    const char *dataTypeString;
715    Type dataType;
716    AccessMode memberAccess;
717 };
718 struct ObjectInfo
719 {
720    ObjectInfo * prev;
721    ObjectInfo * next;
722    Instance instance;
723    char *name;
724    Instantiation instCode;
725    bool deleted;
726    ObjectInfo * oClass;
727    OldList instances;
728    ClassDefinition classDefinition;
729    bool modified;
730    void *i18nStrings;
731 };
732 struct Property
733 {
734    Property * prev;
735    Property * next;
736    const char *name;
737    bool isProperty;
738    AccessMode memberAccess;
739    int id;
740    Class * _class;
741    const char *dataTypeString;
742    Class * dataTypeClass;
743    Type dataType;
744
745    void (*Set)(void *, int);
746    int (*Get)(void *);
747    bool (*IsSet)(void *);
748
749    void *data;
750    void *symbol;
751    int vid;
752    bool conversion;
753    uint watcherOffset;
754    const char *category;
755    bool compiled;
756    bool selfWatchable;
757    bool isWatchable;
758 };
759 struct SubModule
760 {
761    SubModule * prev;
762    SubModule * next;
763    Module module;
764    AccessMode importMode;
765 };
766 struct BTNode
767 {
768    uintptr key;
769    BTNode * parent;
770    BTNode * left;
771    BTNode * right;
772    int depth;
773 };
774 struct Item
775 {
776    Item * prev;
777    Item * next;
778 };
779 struct NamedItem
780 {
781    NamedItem * prev;
782    NamedItem * next;
783    char *name;
784 };
785 struct NamedLink
786 {
787    NamedLink * prev;
788    NamedLink * next;
789    char *name;
790    void *data;
791 };
792 struct NamedLink64
793 {
794    NamedLink64 * prev;
795    NamedLink64 * next;
796    char *name;
797    int64 data;
798 };
799 struct OldLink
800 {
801    OldLink * prev;
802    OldLink * next;
803    void *data;
804 };
805 struct AVLNode
806 {
807    AVLNode_T key;
808 };
809 struct MapNode
810 {
811    AVLNode_T key;
812    MapNode_V value;
813 };
814 struct StringBTNode
815 {
816    String key;
817    StringBTNode * parent;
818    StringBTNode * left;
819    StringBTNode * right;
820    int depth;
821 };
822
823 // Normal Classes Visible Data Structures
824 struct class_members_Instance
825 {
826    void **_vTbl;
827    Class * _class;
828    int _refCount;
829 };
830 struct layout_Module
831 {
832    Application application;
833    OldList classes;
834    OldList defines;
835    OldList functions;
836    OldList modules;
837    Module prev;
838    Module next;
839    const char *name;
840    void *library;
841    void *Unload;
842    ImportType importType;
843    ImportType origImportType;
844    NameSpace privateNameSpace;
845    NameSpace publicNameSpace;
846 };
847 struct class_members_Application
848 {
849    int argc;
850    const char **argv;
851    int exitCode;
852    bool isGUIApp;
853    OldList allModules;
854    char *parsedCommand;
855    NameSpace systemNameSpace;
856 };
857 struct class_members_Array
858 {
859    Array_T *array;
860    uint count;
861    uint minAllocSize;
862 };
863
864 struct class_members_CustomAVLTree
865 {
866    CustomAVLTree_BT root;
867    int count;
868 };
869 struct class_members_DesignerBase
870 {
871    ClassDesignerBase classDesigner;
872    const char *objectClass;
873    bool isDragging;
874 };
875
876 struct class_members_LinkList
877 {
878    LinkList_LT first;
879    LinkList_LT last;
880    int count;
881 };
882
883 struct class_members_SerialBuffer
884 {
885    byte *_buffer;
886    uint count;
887    uint _size;
888    uint pos;
889 };
890
891 // C Exported functions
892 extern __attribute__((dllimport)) Application __ecereNameSpace__ecere__com____ecere_COM_Initialize(bool guiApp, int argc, char *argv[]);
893
894 extern __attribute__((dllimport)) Class * __ecereNameSpace__ecere__com__eSystem_FindClass(Module module, const char *name);
895 extern __attribute__((dllimport)) Class * __ecereNameSpace__ecere__com__eSystem_RegisterClass(ClassType type, const char *name, const char *baseName, int size, int sizeClass, bool (*Constructor)(void *), void (*Destructor)(void *), Module module, AccessMode declMode, AccessMode inheritanceAccess);
896 extern __attribute__((dllimport)) void * __ecereNameSpace__ecere__com__eSystem_new(uint size);
897 extern __attribute__((dllimport)) void * __ecereNameSpace__ecere__com__eSystem_new0(uint size);
898 extern __attribute__((dllimport)) void *__ecereNameSpace__ecere__com__eSystem_Renew(void *memory, uint size);
899 extern __attribute__((dllimport)) void *__ecereNameSpace__ecere__com__eSystem_Renew0(void *memory, uint size);
900 extern __attribute__((dllimport)) void __ecereNameSpace__ecere__com__eSystem_Delete(void *memory);
901 extern __attribute__((dllimport)) DefinedExpression * __ecereNameSpace__ecere__com__eSystem_FindDefine(Module module, const char *name);
902 extern __attribute__((dllimport)) GlobalFunction * __ecereNameSpace__ecere__com__eSystem_FindFunction(Module module, const char *name);
903 extern __attribute__((dllimport)) DefinedExpression * __ecereNameSpace__ecere__com__eSystem_RegisterDefine(const char *name, const char *value, Module module, AccessMode declMode);
904 extern __attribute__((dllimport)) GlobalFunction * __ecereNameSpace__ecere__com__eSystem_RegisterFunction(const char *name, const char *type, void *func, Module module, AccessMode declMode);
905 extern __attribute__((dllimport)) void __ecereNameSpace__ecere__com__eSystem_SetPoolingDisabled(bool disabled);
906
907 extern __attribute__((dllimport)) Module __ecereNameSpace__ecere__com__eModule_Load(Module fromModule, const char *name, AccessMode importAccess);
908 extern __attribute__((dllimport)) Module __ecereNameSpace__ecere__com__eModule_LoadStatic(Module fromModule, const char *name, AccessMode importAccess, bool __ecereNameSpace__ecere__com__Load(Module module), bool __ecereNameSpace__ecere__com__Unload(Module module));
909 extern __attribute__((dllimport)) Module __ecereNameSpace__ecere__com__eModule_LoadStrict(Module fromModule, const char *name, AccessMode importAccess);
910 extern __attribute__((dllimport)) void __ecereNameSpace__ecere__com__eModule_Unload(Module fromModule, Module module);
911
912 extern __attribute__((dllimport)) Method * __ecereNameSpace__ecere__com__eClass_AddMethod(Class * _class, constString name, constString type, void *function, AccessMode declMode);
913 extern __attribute__((dllimport)) Method * __ecereNameSpace__ecere__com__eClass_FindMethod(Class * _class, const char *name, Module module);
914 extern __attribute__((dllimport)) Property * __ecereNameSpace__ecere__com__eClass_FindProperty(Class * _class, const char *name, Module module);
915 extern __attribute__((dllimport)) BitMember * __ecereNameSpace__ecere__com__eClass_AddBitMember(Class * _class, const char *name, const char *type, int bitSize, int bitPos, AccessMode declMode);
916 extern __attribute__((dllimport)) ClassProperty * __ecereNameSpace__ecere__com__eClass_AddClassProperty(Class * _class, const char *name, const char *dataType, void *setStmt, void *getStmt);
917 extern __attribute__((dllimport)) DataMember * __ecereNameSpace__ecere__com__eClass_AddDataMember(Class * _class, const char *name, const char *type, uint size, uint alignment, AccessMode declMode);
918 extern __attribute__((dllimport)) bool __ecereNameSpace__ecere__com__eClass_AddMember(Class * _class, DataMember * dataMember);
919 extern __attribute__((dllimport)) Property * __ecereNameSpace__ecere__com__eClass_AddProperty(Class * _class, const char *name, const char *dataType, void *setStmt, void *getStmt, AccessMode declMode);
920 extern __attribute__((dllimport)) ClassTemplateParameter * __ecereNameSpace__ecere__com__eClass_AddTemplateParameter(Class * _class, const char *name, TemplateParameterType type, const void *info, ClassTemplateArgument defaultArg);
921 extern __attribute__((dllimport)) Method * __ecereNameSpace__ecere__com__eClass_AddVirtualMethod(Class * _class, const char *name, const char *type, void *function, AccessMode declMode);
922 extern __attribute__((dllimport)) void __ecereNameSpace__ecere__com__eClass_DestructionWatchable(Class * _class);
923 extern __attribute__((dllimport)) void __ecereNameSpace__ecere__com__eClass_DoneAddingTemplateParameters(Class * base);
924 extern __attribute__((dllimport)) ClassProperty * __ecereNameSpace__ecere__com__eClass_FindClassProperty(Class * _class, const char *name);
925 extern __attribute__((dllimport)) DataMember * __ecereNameSpace__ecere__com__eClass_FindDataMember(Class * _class, const char *name, Module module, DataMember * *subMemberStack, int *subMemberStackPos);
926 extern __attribute__((dllimport)) DataMember * __ecereNameSpace__ecere__com__eClass_FindDataMemberAndId(Class * _class, const char *name, int *id, Module module, DataMember * *subMemberStack, int *subMemberStackPos);
927 extern __attribute__((dllimport)) DataMember * __ecereNameSpace__ecere__com__eClass_FindDataMemberAndOffset(Class * _class, const char *name, uint *offset, Module module, DataMember * *subMemberStack, int *subMemberStackPos);
928 extern __attribute__((dllimport)) void __ecereNameSpace__ecere__com__eClass_FindNextMember(Class * _class, Class * curClass, DataMember * *curMember, DataMember * *subMemberStack, int *subMemberStackPos);
929 extern __attribute__((dllimport)) int64 __ecereNameSpace__ecere__com__eClass_GetProperty(Class * _class, const char *name);
930 extern __attribute__((dllimport)) bool __ecereNameSpace__ecere__com__eClass_IsDerived(Class * _class, Class * from);
931 extern __attribute__((dllimport)) void __ecereNameSpace__ecere__com__eClass_Resize(Class * _class, int newSize);
932 extern __attribute__((dllimport)) void __ecereNameSpace__ecere__com__eClass_SetProperty(Class * _class, const char *name, int64 value);
933 extern __attribute__((dllimport)) void __ecereNameSpace__ecere__com__eClass_Unregister(Class * _class);
934
935 extern __attribute__((dllimport)) Instance __ecereNameSpace__ecere__com__eInstance_New(Class * _class);
936 extern __attribute__((dllimport)) void __ecereNameSpace__ecere__com__eInstance_Delete(Instance instance);
937 extern __attribute__((dllimport)) void __ecereNameSpace__ecere__com__eInstance_Evolve(Instance *instancePtr, Class * _class);
938 extern __attribute__((dllimport)) void __ecereNameSpace__ecere__com__eInstance_SetMethod(Instance instance, constString name, void *function);
939 extern __attribute__((dllimport)) void __ecereNameSpace__ecere__com__eInstance_DecRef(Instance instance);
940 extern __attribute__((dllimport)) void __ecereNameSpace__ecere__com__eInstance_FireSelfWatchers(Instance instance, Property * _property);
941 extern __attribute__((dllimport)) void __ecereNameSpace__ecere__com__eInstance_FireWatchers(Instance instance, Property * _property);
942 extern __attribute__((dllimport)) void __ecereNameSpace__ecere__com__eInstance_IncRef(Instance instance);
943 extern __attribute__((dllimport)) bool __ecereNameSpace__ecere__com__eInstance_IsDerived(Instance instance, Class * from);
944 extern __attribute__((dllimport)) void __ecereNameSpace__ecere__com__eInstance_StopWatching(Instance instance, Property * _property, Instance object);
945 extern __attribute__((dllimport)) void __ecereNameSpace__ecere__com__eInstance_Watch(Instance instance, Property * _property, void *object, void __ecereNameSpace__ecere__com__callback(void *, void *));
946 extern __attribute__((dllimport)) void __ecereNameSpace__ecere__com__eInstance_WatchDestruction(Instance instance, Instance object, void __ecereNameSpace__ecere__com__callback(void *, void *));
947
948 extern __attribute__((dllimport)) void __ecereNameSpace__ecere__com__eEnum_AddFixedValue(Class * _class, const char *string, int64 value);
949 extern __attribute__((dllimport)) int64 __ecereNameSpace__ecere__com__eEnum_AddValue(Class * _class, const char *string);
950
951 extern __attribute__((dllimport)) DataMember * __ecereNameSpace__ecere__com__eMember_AddDataMember(DataMember * member, const char *name, const char *type, uint size, uint alignment, AccessMode declMode);
952 extern __attribute__((dllimport)) bool __ecereNameSpace__ecere__com__eMember_AddMember(DataMember * addTo, DataMember * dataMember);
953 extern __attribute__((dllimport)) DataMember * __ecereNameSpace__ecere__com__eMember_New(DataMemberType type, AccessMode declMode);
954
955 extern __attribute__((dllimport)) void __ecereNameSpace__ecere__com__eProperty_SelfWatch(Class * _class, const char *name, void (*__ecereNameSpace__ecere__com__callback)(void *));
956 extern __attribute__((dllimport)) void __ecereNameSpace__ecere__com__eProperty_Watchable(Property * _property);
957
958 extern __attribute__((dllimport)) void __ecereNameSpace__ecere__com__MemoryGuard_PopLoc(void);
959 extern __attribute__((dllimport)) void __ecereNameSpace__ecere__com__MemoryGuard_PushLoc(const char *loc);
960
961 extern __attribute__((dllimport)) constString __ecereNameSpace__ecere__GetTranslatedString(constString name, constString string, constString stringAndContext);
962 extern __attribute__((dllimport)) void __ecereNameSpace__ecere__LoadTranslatedStrings(constString moduleName, constString name);
963 extern __attribute__((dllimport)) void __ecereNameSpace__ecere__UnloadTranslatedStrings(constString name);
964
965 // Global Functions
966 extern void (*CheckConsistency)(void);
967 extern void (*CheckMemory)(void);
968 extern DesignerBase (*GetActiveDesigner)(void);
969 extern Platform (*GetRuntimePlatform)(void);
970 extern bool (*LocateModule)(const char *name, const char *fileName);
971 extern void (*Print)(Class * class_object, void * object, ...);
972 extern int (*PrintBuf)(char *buffer, int maxLen, Class * class_object, const void * object, ...);
973 extern void (*PrintLn)(Class * class_object, const void * object, ...);
974 extern int (*PrintLnBuf)(char *buffer, int maxLen, Class * class_object, const void * object, ...);
975 extern char *(*PrintLnString)(Class * class_object, const void * object, ...);
976 extern int (*PrintStdArgsToBuffer)(char *buffer, int maxLen, Class * class_object, const void * object, va_list args);
977 extern char *(*PrintString)(Class * class_object, const void * object, ...);
978 extern void (*SetActiveDesigner)(DesignerBase designer);
979 extern int64 (*_strtoi64)(const char *string, const char **endString, int base);
980 extern uint64 (*_strtoui64)(const char *string, const char **endString, int base);
981 extern uint (*log2i)(uint number);
982 extern void (*memswap)(byte *a, byte *b, uint size);
983 extern uint (*pow2i)(uint number);
984 extern void (*queryMemInfo)(char *string);
985 extern void (*ChangeCh)(char *string, char ch1, char ch2);
986 extern void (*ChangeChars)(char *string, const char *chars, char alt);
987 extern char *(*ChangeExtension)(const char *string, const char *ext, char *output);
988 extern char *(*CopyString)(const char *string);
989 extern double (*FloatFromString)(const char *string);
990 extern int64 (*GetCurrentThreadID)(void);
991 extern char *(*GetExtension)(const char *string, char *output);
992 extern uint (*GetHexValue)(char **buffer);
993 extern char *(*GetLastDirectory)(const char *string, char *output);
994 extern bool (*GetString)(char **buffer, char *string, int max);
995 extern int (*GetValue)(char **buffer);
996 extern int (*ISO8859_1toUTF8)(const char *source, char *dest, int max);
997 extern bool (*IsPathInsideOf)(const char *path, const char *of);
998 extern char *(*MakePathRelative)(const char *path, const char *to, char *destination);
999 extern char *(*PathCat)(char *string, const char *addedPath);
1000 extern char *(*PathCatSlash)(char *string, const char *addedPath);
1001 extern void (*PrintBigSize)(char *string, double size, int prec);
1002 extern void (*PrintSize)(char *string, uint size, int prec);
1003 extern char *(*RSearchString)(const char *buffer, const char *subStr, int maxLen, bool matchCase, bool matchWord);
1004 extern void (*RepeatCh)(char *string, int count, char ch);
1005 extern char *(*SearchString)(const char *buffer, int start, const char *subStr, bool matchCase, bool matchWord);
1006 extern bool (*SplitArchivePath)(const char *fileName, char *archiveName, const char **archiveFile);
1007 extern char *(*SplitDirectory)(const char *string, char *part, char *rest);
1008 extern bool (*StripExtension)(char *string);
1009 extern char *(*StripLastDirectory)(const char *string, char *output);
1010 extern char *(*StripQuotes)(const char *string, char *output);
1011 extern int (*Tokenize)(char *string, int maxTokens, char *tokens[], BackSlashEscaping esc);
1012 extern int (*TokenizeWith)(char *string, int maxTokens, char *tokens[], const char *tokenizers, bool escapeBackSlashes);
1013 extern char *(*TrimLSpaces)(const char *string, char *output);
1014 extern char *(*TrimRSpaces)(const char *string, char *output);
1015 extern char *(*UTF16toUTF8)(const uint16 *source);
1016 extern int (*UTF16toUTF8Buffer)(const uint16 *source, char *dest, int max);
1017 extern int (*UTF32toUTF8Len)(const unichar *source, int count, char *dest, int max);
1018 extern unichar (*UTF8GetChar)(const char *string, int *numBytes);
1019 extern bool (*UTF8Validate)(const char *source);
1020 extern uint16 *(*UTF8toUTF16)(const char *source, int *wordCount);
1021 extern int (*UTF8toUTF16Buffer)(const char *source, uint16 *dest, int max);
1022 extern void (*strcatf)(char *string, const char *format, ...);
1023
1024 // Base Class
1025 extern Class * class_class;
1026
1027 extern Method * method_class_onDisplay;
1028 extern Method * method_class_onCompare;
1029 extern Method * method_class_onCopy;
1030 extern Method * method_class_onFree;
1031 extern Method * method_class_onGetString;
1032 extern Method * method_class_onGetDataFromString;
1033 extern Method * method_class_onEdit;
1034 extern Method * method_class_onSerialize;
1035 extern Method * method_class_onUnserialize;
1036 extern Method * method_class_onSaveEdit;
1037
1038 extern int onDisplay_vTblID;
1039 extern int onCompare_vTblID;
1040 extern int onCopy_vTblID;
1041 extern int onFree_vTblID;
1042 extern int onGetString_vTblID;
1043 extern int onGetDataFromString_vTblID;
1044 extern int onEdit_vTblID;
1045 extern int onSerialize_vTblID;
1046 extern int onUnserialize_vTblID;
1047 extern int onSaveEdit_vTblID;
1048
1049 extern Class * class_String;
1050 extern Class * class_int;
1051 extern Class * class_double;
1052 extern Class * class_float;
1053 extern Class * class_char;
1054 extern Class * class_int64;
1055 extern Class * class_short;
1056 extern Class * class_uint16;
1057 extern Class * class_uint;
1058 extern Class * class_uint64;
1059 extern Class * class_byte;
1060
1061 // Instance Class
1062 extern Class * class_Instance;
1063
1064 // Application Class
1065 extern Class * class_Application;
1066
1067 // Methods
1068 extern Method * method_Application_main;
1069
1070 extern int Application_main_vTblID;
1071
1072 Module eC_init(bool guiApp, int argc, char * argv[]);
1073
1074 #if defined(__cplusplus)
1075    #undef bool
1076 #elif defined(REDEFINE_STDBOOL)
1077    #undef bool
1078    #define bool _Bool
1079 #endif
1080
1081 #ifdef __cplusplus
1082
1083    #undef Instance
1084    #undef Module
1085    #undef Application
1086    #undef Container
1087    #undef Array
1088    #undef CustomAVLTree
1089    #undef AVLTree
1090    #undef Map
1091    #undef LinkList
1092    #undef List
1093    #undef IOChannel
1094    #undef SerialBuffer
1095    #undef OldArray
1096
1097    #undef Window
1098    #undef ClassDesignerBase
1099    #undef DesignerBase
1100
1101    // Structs / Unions (with methods or properties)
1102    #undef Iterator
1103    #undef MapIterator
1104    #undef BuiltInContainer
1105    #undef BinaryTree
1106    #undef StringBinaryTree
1107    #undef OldList
1108
1109    // class : struct (with methods or properties)
1110    #undef Class
1111    #undef BTNode
1112    #undef Item
1113    #undef OldLink
1114    #undef AVLNode
1115    #undef MapNode
1116    #undef StringBTNode
1117
1118 };
1119
1120 #endif
1121
1122 #endif