bindings: Fixed support for C++ instantiating objects from eC
[sdk] / bindings / c / eC.c
1 #include "eC.h"
2
3 void (*CheckConsistency)(void);
4 void (*CheckMemory)(void);
5 DesignerBase (*GetActiveDesigner)(void);
6 Platform (*GetRuntimePlatform)(void);
7 void (*InitializeDataTypes)(Module module);
8 void (*InitializeDataTypes1)(Module module);
9 bool (*LocateModule)(const char *name, const char *fileName);
10 void (*Print)(Class * class_object, void * object, ...);
11 int (*PrintBuf)(char *buffer, int maxLen, Class * class_object, const void * object, ...);
12 void (*PrintLn)(Class * class_object, const void * object, ...);
13 int (*PrintLnBuf)(char *buffer, int maxLen, Class * class_object, const void * object, ...);
14 char *(*PrintLnString)(Class * class_object, const void * object, ...);
15 int (*PrintStdArgsToBuffer)(char *buffer, int maxLen, Class * class_object, const void * object, va_list args);
16 char *(*PrintString)(Class * class_object, const void * object, ...);
17 void (*SetActiveDesigner)(DesignerBase designer);
18 // int64 (*_strtoi64)(const char *string, const char **endString, int base);
19 // uint64 (*_strtoui64)(const char *string, const char **endString, int base);
20 uint (*log2i)(uint number);
21 void (*memswap)(byte *a, byte *b, uint size);
22 uint (*pow2i)(uint number);
23 void (*queryMemInfo)(char *string);
24 void (*ChangeCh)(char *string, char ch1, char ch2);
25 void (*ChangeChars)(char *string, const char *chars, char alt);
26 char *(*ChangeExtension)(const char *string, const char *ext, char *output);
27 char *(*CopyString)(const char *string);
28 double (*FloatFromString)(const char *string);
29 int64 (*GetCurrentThreadID)(void);
30 char *(*GetExtension)(const char *string, char *output);
31 uint (*GetHexValue)(char **buffer);
32 char *(*GetLastDirectory)(const char *string, char *output);
33 bool (*GetString)(char **buffer, char *string, int max);
34 int (*GetValue)(char **buffer);
35 int (*ISO8859_1toUTF8)(const char *source, char *dest, int max);
36 bool (*IsPathInsideOf)(const char *path, const char *of);
37 char *(*MakePathRelative)(const char *path, const char *to, char *destination);
38 char *(*PathCat)(char *string, const char *addedPath);
39 char *(*PathCatSlash)(char *string, const char *addedPath);
40 void (*PrintBigSize)(char *string, double size, int prec);
41 void (*PrintSize)(char *string, uint size, int prec);
42 char *(*RSearchString)(const char *buffer, const char *subStr, int maxLen, bool matchCase, bool matchWord);
43 void (*RepeatCh)(char *string, int count, char ch);
44 char *(*SearchString)(const char *buffer, int start, const char *subStr, bool matchCase, bool matchWord);
45 bool (*SplitArchivePath)(const char *fileName, char *archiveName, const char **archiveFile);
46 char *(*SplitDirectory)(const char *string, char *part, char *rest);
47 bool (*StripExtension)(char *string);
48 char *(*StripLastDirectory)(const char *string, char *output);
49 char *(*StripQuotes)(const char *string, char *output);
50 int (*Tokenize)(char *string, int maxTokens, char *tokens[], BackSlashEscaping esc);
51 int (*TokenizeWith)(char *string, int maxTokens, char *tokens[], const char *tokenizers, bool escapeBackSlashes);
52 char *(*TrimLSpaces)(const char *string, char *output);
53 char *(*TrimRSpaces)(const char *string, char *output);
54 char *(*UTF16toUTF8)(const uint16 *source);
55 int (*UTF16toUTF8Buffer)(const uint16 *source, char *dest, int max);
56 int (*UTF32toUTF8Len)(const unichar *source, int count, char *dest, int max);
57 unichar (*UTF8GetChar)(const char *string, int *numBytes);
58 bool (*UTF8Validate)(const char *source);
59 uint16 *(*UTF8toUTF16)(const char *source, int *wordCount);
60 int (*UTF8toUTF16Buffer)(const char *source, uint16 *dest, int max);
61 void (*strcatf)(char *string, const char *format, ...);
62
63 Class * class_Application;
64 Class * class_String;
65 Class * class_int;
66 Class * class_double;
67 Class * class_float;
68 Class * class_char;
69 Class * class_int64;
70 Class * class_short;
71 Class * class_uint16;
72 Class * class_uint;
73 Class * class_uint64;
74 Class * class_byte;
75
76 Class * class_class;
77
78 Class * class_Instance;
79
80 Method * method_class_onDisplay;
81 Method * method_class_onCompare;
82 Method * method_class_onCopy;
83 Method * method_class_onFree;
84 Method * method_class_onGetString;
85 Method * method_class_onGetDataFromString;
86 Method * method_class_onEdit;
87 Method * method_class_onSerialize;
88 Method * method_class_onUnserialize;
89 Method * method_class_onSaveEdit;
90
91 int onDisplay_vTblID;
92 int onCompare_vTblID;
93 int onCopy_vTblID;
94 int onFree_vTblID;
95 int onGetString_vTblID;
96 int onGetDataFromString_vTblID;
97 int onEdit_vTblID;
98 int onSerialize_vTblID;
99 int onUnserialize_vTblID;
100 int onSaveEdit_vTblID;
101
102 Class * class_Module;
103
104 int Application_main_vTblID;
105
106 Method * method_Application_main;
107
108 GlobalFunction * function_PrintLn;
109
110 Application eC_init(bool guiApp, int argc, char * argv[])
111 {
112    Application app = eC_initApp(guiApp, argc, argv);
113    if(app)
114    {
115       Module module = Module_load(app, "ecereCOM", publicAccess);
116       app->_refCount++;
117       if(module)
118       {
119          // Set up all the class_*, property, method, function pointers ...
120          class_class = eC_findClass(app, "class");
121          if(class_class)
122          {
123             method_class_onDisplay = Class_findMethod(class_class, "OnDisplay", app);
124             if(method_class_onDisplay)
125                onDisplay_vTblID = method_class_onDisplay->vid;
126             method_class_onCompare = Class_findMethod(class_class, "OnCompare", app);
127             if(method_class_onCompare)
128                onCompare_vTblID = method_class_onCompare->vid;
129             method_class_onCopy = Class_findMethod(class_class, "OnCopy", app);
130             if(method_class_onCopy)
131                onCopy_vTblID = method_class_onCopy->vid;
132             method_class_onFree = Class_findMethod(class_class, "OnFree", app);
133             if(method_class_onFree)
134                onFree_vTblID = method_class_onFree->vid;
135             method_class_onGetString = Class_findMethod(class_class, "OnGetString", app);
136             if(method_class_onGetString)
137                onGetString_vTblID = method_class_onGetString->vid;
138             method_class_onGetDataFromString = Class_findMethod(class_class, "OnGetDataFromString", app);
139             if(method_class_onGetDataFromString)
140                onGetDataFromString_vTblID = method_class_onGetDataFromString->vid;
141             method_class_onEdit = Class_findMethod(class_class, "OnEdit", app);
142             if(method_class_onEdit)
143                onEdit_vTblID = method_class_onEdit->vid;
144             method_class_onSerialize = Class_findMethod(class_class, "OnSerialize", app);
145             if(method_class_onSerialize)
146                onSerialize_vTblID = method_class_onSerialize->vid;
147             method_class_onUnserialize = Class_findMethod(class_class, "OnUnserialize", app);
148             if(method_class_onUnserialize)
149                onUnserialize_vTblID = method_class_onUnserialize->vid;
150             method_class_onSaveEdit = Class_findMethod(class_class, "OnSaveEdit", app);
151             if(method_class_onSaveEdit)
152                onSaveEdit_vTblID = method_class_onSaveEdit->vid;
153          }
154
155          class_String = eC_findClass(app, "String");
156          class_int = eC_findClass(app, "int");
157          class_double = eC_findClass(app, "double");
158          class_float = eC_findClass(app, "float");
159          class_char = eC_findClass(app, "char");
160          class_int64 = eC_findClass(app, "int64");
161          class_short = eC_findClass(app, "short");
162          class_uint16 = eC_findClass(app, "uint16");
163          class_uint = eC_findClass(app, "uint");
164          class_uint64 = eC_findClass(app, "uint64");
165          class_byte = eC_findClass(app, "byte");
166
167          class_Instance = eC_findClass(app, "Instance");
168
169          class_Module = eC_findClass(app, "Module");
170
171          class_Application = eC_findClass(app, "Application");
172          if(class_Application)
173          {
174             method_Application_main = Class_findMethod(class_Application, "Main", app);
175             if(method_Application_main)
176                Application_main_vTblID = method_Application_main->vid;
177          }
178
179          function_PrintLn = eC_findFunction(app, "PrintLn");
180          if(function_PrintLn)
181             PrintLn = (void *)function_PrintLn->function;
182       }
183    }
184    return app;
185 }
186
187 Module __thisModule;