i18n: Moved .pot files into locale/, added them to repository, renamed eda.mo->EDA.mo
[sdk] / compiler / bootstrap / ecs / bootstrap / ecs.c
index cbc5d1c..73a9cbf 100644 (file)
@@ -289,6 +289,7 @@ struct __ecereNameSpace__ecere__sys__OldList *  templateParams;
 struct __ecereNameSpace__ecere__sys__OldList templatedClasses;
 struct Context * ctx;
 int isIterator;
+struct Expression * propCategory;
 };
 
 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Type;
@@ -477,6 +478,9 @@ struct __ecereNameSpace__ecere__com__Method * method;
 };
 };
 
+
+static unsigned int i18n;
+
 static int targetPlatform;
 
 static unsigned int isConsole;
@@ -1192,6 +1196,14 @@ __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "\n");
 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "\n");
 }
 }
+for(defModule = modules.first; defModule; defModule = defModule->next)
+if(defModule->globalInstance)
+{
+if(!strcmp(defModule->name, "i18n"))
+__ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "   __ecereCreateModuleInstances_i18n();\n");
+}
+if(i18n)
+__ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "      LoadTranslatedStrings(module, \"%s\");\n", projectName);
 if(isDynamicLibrary)
 {
 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "   }\n");
@@ -1214,6 +1226,8 @@ if(defModule->globalInstance)
 {
 char moduleName[1024];
 
+if(!strcmp(defModule->name, "i18n"))
+continue;
 strcpy(moduleName, defModule->name);
 __ecereNameSpace__ecere__sys__ChangeCh(moduleName, ' ', '_');
 __ecereNameSpace__ecere__sys__ChangeCh(moduleName, '-', '_');
@@ -1251,6 +1265,9 @@ if(isDynamicLibrary)
 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "   if(__currentModule == module)\n");
 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "   {\n");
 }
+{
+unsigned int destroyI18n = 0x0;
+
 if(modules.count)
 {
 for(defModule = modules.first; defModule; defModule = defModule->next)
@@ -1258,6 +1275,11 @@ if(defModule->globalInstance)
 {
 char moduleName[1024];
 
+if(!strcmp(defModule->name, "i18n"))
+{
+destroyI18n = 0x1;
+continue;
+}
 strcpy(moduleName, defModule->name);
 __ecereNameSpace__ecere__sys__ChangeCh(moduleName, ' ', '_');
 __ecereNameSpace__ecere__sys__ChangeCh(moduleName, '-', '_');
@@ -1266,6 +1288,11 @@ __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "   __ecereDestroyMod
 }
 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "\n");
 }
+if(i18n)
+__ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "   UnloadTranslatedStrings(__currentModule);\n");
+if(destroyI18n)
+__ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "   __ecereDestroyModuleInstances_i18n();\n");
+}
 if(isDynamicLibrary)
 {
 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "   }\n");
@@ -1692,6 +1719,7 @@ else
 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, " = 0");
 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, ";\n\n");
 }
+__ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "      incref this;\n");
 for(param = method->dataType->params.first; param; param = param->next)
 {
 char type[1024] = "";
@@ -1746,6 +1774,7 @@ __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "         __ecereBuff
 }
 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "      }\n");
 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "      __ecereBuffer.Free();\n");
+__ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "      delete this;\n");
 if(method->dataType->returnType->kind != 0)
 {
 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "      return __ecereResult;\n");
@@ -1780,6 +1809,7 @@ __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "\n");
 
 static void BindDCOMServer()
 {
+unsigned int mutexDeclared = 0x0;
 struct __ecereNameSpace__ecere__com__Class * _class;
 
 for(_class = ((struct __ecereNameSpace__ecere__com__Module *)(((char *)privateModule + 12)))->classes.first; _class; _class = _class->next)
@@ -1807,6 +1837,8 @@ __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "class DCOM%s : ecere
 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "{\n");
 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "   virtual void CallMethod(uint __ecereMethodID, SerialBuffer __ecereBuffer)\n");
 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "   {\n");
+__ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "      %s inst = (%s)instance;\n", _class->fullName, _class->fullName);
+__ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "      incref inst;\n");
 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "      switch(__ecereMethodID)\n");
 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "      {\n");
 for(method = (struct __ecereNameSpace__ecere__com__Method *)__ecereProp___ecereNameSpace__ecere__sys__BinaryTree_Get_first(&_class->methods); method; method = (struct __ecereNameSpace__ecere__com__Method *)__ecereProp___ecereNameSpace__ecere__sys__BTNode_Get_next(((struct __ecereNameSpace__ecere__sys__BTNode *)method)))
@@ -1941,6 +1973,7 @@ __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "         }\n");
 }
 }
 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "      }\n");
+__ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "      delete inst;\n");
 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "   }\n");
 for(vid = _class->base->vTblSize; vid < _class->vTblSize; vid++)
 {
@@ -1952,6 +1985,13 @@ if(method->type == 1 && method->_class == _class && method->vid == vid)
 break;
 if(method)
 {
+if(!mutexDeclared)
+{
+DeclareClass(FindClass("ecere::sys::Mutex"), "__ecereClass___ecereNameSpace__ecere__sys__Mutex");
+DeclareMethod(__ecereNameSpace__ecere__com__eClass_FindMethod(__ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "ecere::sys::Mutex"), "Wait", privateModule), "__ecereMethod___ecereNameSpace__ecere__sys__Mutex_Wait");
+DeclareMethod(__ecereNameSpace__ecere__com__eClass_FindMethod(__ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "ecere::sys::Mutex"), "Release", privateModule), "__ecereMethod___ecereNameSpace__ecere__sys__Mutex_Release");
+mutexDeclared = 0x1;
+}
 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "\n");
 if(!method->dataType)
 method->dataType = ProcessTypeString(method->dataTypeString, 0x0);
@@ -1996,6 +2036,8 @@ else
 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, " = 0");
 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, ";\n\n");
 }
+__ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "      incref __ecereObject;\n");
+__ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "      __ecereMethod___ecereNameSpace__ecere__sys__Mutex_Wait(__ecereObject.mutex);\n");
 for(param = method->dataType->params.first; param; param = param->next)
 {
 char type[1024] = "";
@@ -2017,13 +2059,28 @@ DeclareClass(classSym, className);
 if(param->kind == 8 && !strcmp(param->_class->string, "String"))
 {
 DeclareClass(FindClass("StaticString"), "__ecereClass_StaticString");
-__ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "      __ecereObject.virtualsBuffer.Serialize((StaticString)%s);\n", param->name);
+__ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "      __ecereObject.argsBuffer.Serialize((StaticString)%s);\n", param->name);
 }
 else
-__ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "      __ecereObject.virtualsBuffer.Serialize(%s);\n", param->name);
+__ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "      __ecereObject.argsBuffer.Serialize(%s);\n", param->name);
+}
+DeclareMethod(__ecereNameSpace__ecere__com__eClass_FindMethod(__ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "ecere::net::DCOMServerObject"), "CallVirtualMethod", privateModule), "__ecereMethod___ecereNameSpace__ecere__net__DCOMServerObject_CallVirtualMethod");
+{
+unsigned int hasReturnValue = method->dataType->returnType->kind != 0;
+
+if(!hasReturnValue)
+{
+for(param = method->dataType->params.first; param; param = param->next)
+{
+if(param->kind == 8 && ((param->_class && param->_class->registered && param->_class->registered->type == 1) || !strcmp(param->_class->string, "String")) && !param->constant)
+{
+hasReturnValue = 0x1;
+break;
+}
+}
+}
+__ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "      if(__ecereObject.CallVirtualMethod(%d, %s))\n", vid - _class->base->vTblSize, hasReturnValue ? "true" : "false");
 }
-DeclareMethod(__ecereNameSpace__ecere__com__eClass_FindMethod(__ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "ecere::net::DCOMServerObject"), "CallVirtualMethod", privateModule), "__ecereMethod___ecereNameSpace__ecere__net__DCOMServerObject_CallVirutalMethod");
-__ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "      if(__ecereObject.CallVirtualMethod(%d))\n", vid - _class->base->vTblSize);
 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "      {\n");
 for(param = method->dataType->params.first; param; param = param->next)
 {
@@ -2032,10 +2089,10 @@ if(param->kind == 8 && ((param->_class && param->_class->registered && param->_c
 if(!strcmp(param->_class->string, "String"))
 {
 DeclareClass(FindClass("StaticString"), "__ecereClass_StaticString");
-__ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "         __ecereObject.virtualsBuffer.Unserialize((StaticString)%s);\n", param->name);
+__ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "         __ecereObject.returnBuffer.Unserialize((StaticString)%s);\n", param->name);
 }
 else
-__ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "         __ecereObject.virtualsBuffer.Unserialize(%s);\n", param->name);
+__ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "         __ecereObject.returnBuffer.Unserialize(%s);\n", param->name);
 }
 }
 if(method->dataType->returnType->kind != 0)
@@ -2043,10 +2100,10 @@ if(method->dataType->returnType->kind != 0)
 if(method->dataType->returnType->kind == 8 && !strcmp(method->dataType->returnType->_class->string, "String"))
 {
 DeclareClass(FindClass("StaticString"), "__ecereClass_StaticString");
-__ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "         __ecereObject.virtualsBuffer.Unserialize((StaticString)__ecereResult);\n");
+__ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "         __ecereObject.returnBuffer.Unserialize((StaticString)__ecereResult);\n");
 }
 else
-__ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "         __ecereObject.virtualsBuffer.Unserialize(__ecereResult);\n");
+__ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "         __ecereObject.returnBuffer.Unserialize(__ecereResult);\n");
 }
 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "      }\n");
 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "      else\n");
@@ -2058,7 +2115,9 @@ if(param->next)
 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, ", ");
 }
 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, ");\n");
-__ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "      __ecereObject.virtualsBuffer.Free();\n");
+__ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "      __ecereObject.returnBuffer.Free();\n");
+__ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "      __ecereMethod___ecereNameSpace__ecere__sys__Mutex_Release(__ecereObject.mutex);\n");
+__ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "      delete __ecereObject;\n");
 if(method->dataType->returnType->kind != 0)
 {
 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "      return __ecereResult;\n");
@@ -2082,6 +2141,10 @@ extern void SetSymbolsDir(char *  s);
 
 extern int printf(char * , ...);
 
+extern char *  __ecereNameSpace__ecere__GetTranslatedString(struct __ecereNameSpace__ecere__com__Instance * module, char *  string, char *  stringAndContext);
+
+extern struct __ecereNameSpace__ecere__com__Instance * __thisModule;
+
 extern char *  __ecereNameSpace__ecere__sys__GetExtension(char *  string, char *  output);
 
 extern void SetDefines(struct __ecereNameSpace__ecere__sys__OldList *  list);
@@ -2104,14 +2167,52 @@ extern struct __ecereNameSpace__ecere__com__Instance * __ecereNameSpace__ecere__
 
 extern void SetPrivateModule(struct __ecereNameSpace__ecere__com__Instance * module);
 
+extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__IteratorPointer;
+
+struct __ecereNameSpace__ecere__com__IteratorPointer;
+
+extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__MapIterator;
+
+struct __ecereNameSpace__ecere__com__MapIterator
+{
+struct __ecereNameSpace__ecere__com__Instance * container;
+struct __ecereNameSpace__ecere__com__IteratorPointer * pointer;
+};
+
 extern int strcasecmp(const char * , const char * );
 
 extern unsigned int LoadSymbols(char *  fileName, int importType, unsigned int loadDllOnly);
 
 extern void CheckDataRedefinitions(void);
 
+extern char *  __ecereNameSpace__ecere__sys__ChangeExtension(char *  string, char *  ext, char *  output);
+
+extern char *  strstr(char * , const char * );
+
+extern int strlen(const char * );
+
+extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_ContextStringPair;
+
+struct ContextStringPair
+{
+char * string;
+char * context;
+};
+
+extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Iterator;
+
+struct __ecereNameSpace__ecere__com__Iterator
+{
+struct __ecereNameSpace__ecere__com__Instance * container;
+struct __ecereNameSpace__ecere__com__IteratorPointer * pointer;
+};
+
 extern void ComputeModuleClasses(struct __ecereNameSpace__ecere__com__Instance * module);
 
+extern unsigned int __ecereNameSpace__ecere__sys__MakeDir(char *  path);
+
+extern char *  __ecereNameSpace__ecere__sys__PathCat(char *  string, char *  addedPath);
+
 extern void FreeContext(struct Context * context);
 
 extern void FreeExcludedSymbols(struct __ecereNameSpace__ecere__sys__OldList * excludedSymbols);
@@ -2130,6 +2231,10 @@ extern void FreeIncludeFiles(void);
 
 extern void FreeGlobalData(struct __ecereNameSpace__ecere__com__NameSpace * globalDataList);
 
+extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Map_TPL_ContextStringPair__ecere__com__List_TPL_String___;
+
+extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__List_TPL_String_;
+
 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Application;
 
 struct __ecereNameSpace__ecere__com__Application
@@ -2151,6 +2256,40 @@ extern struct __ecereNameSpace__ecere__com__Property ** __ecereProp___ecereNameS
 
 void __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(struct __ecereNameSpace__ecere__sys__OldList * this, void *  item);
 
+struct __ecereNameSpace__ecere__com__Instance * __ecereProp___ecereNameSpace__ecere__com__MapIterator_Get_map(struct __ecereNameSpace__ecere__com__MapIterator * this);
+
+void __ecereProp___ecereNameSpace__ecere__com__MapIterator_Set_map(struct __ecereNameSpace__ecere__com__MapIterator * this, struct __ecereNameSpace__ecere__com__Instance * value);
+
+extern struct __ecereNameSpace__ecere__com__Property ** __ecereProp___ecereNameSpace__ecere__com__MapIterator_map;
+
+int __ecereVMethodID___ecereNameSpace__ecere__com__Container_Add;
+
+unsigned int __ecereMethod___ecereNameSpace__ecere__com__Iterator_Index(struct __ecereNameSpace__ecere__com__Iterator * this, uint64 index, unsigned int create);
+
+uint64 __ecereProp___ecereNameSpace__ecere__com__Iterator_Get_data(struct __ecereNameSpace__ecere__com__Iterator * this);
+
+void __ecereProp___ecereNameSpace__ecere__com__Iterator_Set_data(struct __ecereNameSpace__ecere__com__Iterator * this, uint64 value);
+
+extern struct __ecereNameSpace__ecere__com__Property ** __ecereProp___ecereNameSpace__ecere__com__Iterator_data;
+
+unsigned int __ecereMethod___ecereNameSpace__ecere__com__Iterator_Next();
+
+int __ecereVMethodID___ecereNameSpace__ecere__com__Container_RemoveAll;
+
+int __ecereVMethodID___ecereNameSpace__ecere__com__Container_Free;
+
+extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__CustomAVLTree;
+
+struct __ecereNameSpace__ecere__com__CustomAVLTree
+{
+struct __ecereNameSpace__ecere__com__AVLNode * root;
+int count;
+};
+
+uint64 __ecereProp___ecereNameSpace__ecere__com__MapIterator_Get_key(struct __ecereNameSpace__ecere__com__MapIterator * this);
+
+extern struct __ecereNameSpace__ecere__com__Property ** __ecereProp___ecereNameSpace__ecere__com__MapIterator_key;
+
 void __ecereMethod___ecereNameSpace__ecere__sys__OldList_Free(struct __ecereNameSpace__ecere__sys__OldList * this, void (*  freeFn)(void * ));
 
 void __ecereMethod_SymbolgenApp_Main(struct __ecereNameSpace__ecere__com__Instance * this)
@@ -2218,7 +2357,7 @@ valid = 0x0;
 if(!output)
 valid = 0x0;
 if(!valid)
-printf("Syntax:\n   ecs [-t <target platform>] <input>[, <input>]* -o <output>\n");
+printf(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "Syntax:\n   ecs [-t <target platform>] <input>[, <input>]* -o <output>\n", (((void *)0))));
 else
 {
 int c;
@@ -2241,6 +2380,9 @@ mainModule = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_ModuleImpo
 SetMainModule(mainModule);
 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(&_imports, mainModule);
 {
+struct __ecereNameSpace__ecere__com__Instance * intlStrings = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass___ecereNameSpace__ecere__com__Map_TPL_ContextStringPair__ecere__com__List_TPL_String___);
+struct __ecereNameSpace__ecere__com__MapIterator it = (it.container = (void *)0, it.pointer = (void *)0, __ecereProp___ecereNameSpace__ecere__com__MapIterator_Set_map(&it, intlStrings), it);
+
 for(c = 1; c < ((struct __ecereNameSpace__ecere__com__Application *)(((char *)this + 296)))->argc; c++)
 {
 char * file = ((struct __ecereNameSpace__ecere__com__Application *)(((char *)this + 296)))->argv[c];
@@ -2311,6 +2453,99 @@ __ecereMethod___ecereNameSpace__ecere__sys__OldList_AddName(&_defines, importedM
 module->globalInstance = LoadSymbols(file, 0, 0x0);
 CheckDataRedefinitions();
 }
+{
+struct __ecereNameSpace__ecere__com__Instance * f;
+
+__ecereNameSpace__ecere__sys__ChangeExtension(file, "bowl", fileName);
+f = __ecereNameSpace__ecere__sys__FileOpen(fileName, 1);
+if(f)
+{
+static char line[65536];
+struct __ecereNameSpace__ecere__com__Instance * comments = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass___ecereNameSpace__ecere__com__List_TPL_String_);
+char * msgid = (((void *)0)), * msgstr = (((void *)0)), * msgctxt = (((void *)0));
+
+while(!((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Eof])(f))
+{
+if(__ecereMethod___ecereNameSpace__ecere__sys__File_GetLine(f, line, sizeof line))
+{
+int len;
+
+__ecereNameSpace__ecere__sys__TrimLSpaces(line, line);
+if(line[0] == '#')
+{
+((struct __ecereNameSpace__ecere__com__IteratorPointer * (*)(struct __ecereNameSpace__ecere__com__Instance *, uint64 value))comments->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__com__Container_Add])(comments, (uint64)(__ecereNameSpace__ecere__sys__CopyString(line)));
+}
+else if(strstr(line, "msgid \"") == line)
+{
+(__ecereNameSpace__ecere__com__eSystem_Delete(msgid), msgid = 0);
+msgid = __ecereNameSpace__ecere__sys__CopyString(line + 7);
+len = strlen(msgid);
+if(len)
+msgid[len - 1] = (unsigned char)0;
+}
+else if(strstr(line, "msgctxt \"") == line)
+{
+(__ecereNameSpace__ecere__com__eSystem_Delete(msgctxt), msgctxt = 0);
+msgctxt = __ecereNameSpace__ecere__sys__CopyString(line + 9);
+len = strlen(msgctxt);
+if(len)
+msgctxt[len - 1] = (unsigned char)0;
+}
+else if(strstr(line, "msgstr \"") == line)
+{
+(__ecereNameSpace__ecere__com__eSystem_Delete(msgstr), msgstr = 0);
+msgstr = __ecereNameSpace__ecere__sys__CopyString(line + 8);
+len = strlen(msgstr);
+if(len)
+msgstr[len - 1] = (unsigned char)0;
+}
+if(msgid && msgstr)
+{
+struct ContextStringPair pair = 
+{
+msgid, msgctxt
+};
+
+i18n = 0x1;
+if(!__ecereMethod___ecereNameSpace__ecere__com__Iterator_Index(&it, (&pair), 0x0))
+{
+msgid = (((void *)0));
+msgctxt = (((void *)0));
+__extension__ ({
+struct __ecereNameSpace__ecere__com__Iterator __internalIterator = 
+{
+intlStrings, 0
+};
+
+__ecereMethod___ecereNameSpace__ecere__com__Iterator_Index(&__internalIterator, (((&pair))), 0x1);
+__ecereProp___ecereNameSpace__ecere__com__Iterator_Set_data(&__internalIterator, comments);
+});
+comments = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass___ecereNameSpace__ecere__com__List_TPL_String_);
+}
+else
+{
+{
+struct __ecereNameSpace__ecere__com__Iterator s = 
+{
+(comments), 0
+};
+
+while(__ecereMethod___ecereNameSpace__ecere__com__Iterator_Next(&s))
+((struct __ecereNameSpace__ecere__com__IteratorPointer * (*)(struct __ecereNameSpace__ecere__com__Instance *, uint64 value))((struct __ecereNameSpace__ecere__com__Instance *)__ecereProp___ecereNameSpace__ecere__com__Iterator_Get_data(&it))->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__com__Container_Add])(((struct __ecereNameSpace__ecere__com__Instance *)__ecereProp___ecereNameSpace__ecere__com__Iterator_Get_data(&it)), __ecereProp___ecereNameSpace__ecere__com__Iterator_Get_data(&s));
+}
+((void (*)(struct __ecereNameSpace__ecere__com__Instance *))comments->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__com__Container_RemoveAll])(comments);
+}
+(__ecereNameSpace__ecere__com__eSystem_Delete(msgid), msgid = 0);
+(__ecereNameSpace__ecere__com__eSystem_Delete(msgctxt), msgctxt = 0);
+(__ecereNameSpace__ecere__com__eSystem_Delete(msgstr), msgstr = 0);
+}
+}
+}
+((void (*)(struct __ecereNameSpace__ecere__com__Instance *))comments->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__com__Container_Free])(comments);
+(__ecereNameSpace__ecere__com__eInstance_DecRef(comments), comments = 0);
+(__ecereNameSpace__ecere__com__eInstance_DecRef(f), f = 0);
+}
+}
 }
 }
 }
@@ -2320,6 +2555,58 @@ if(!isDynamicLibrary)
 thisAppClass = SearchAppClass_Module(privateModule);
 }
 WriteMain(output);
+if(((struct __ecereNameSpace__ecere__com__CustomAVLTree *)(((char *)intlStrings + 12)))->count)
+{
+struct __ecereNameSpace__ecere__com__Instance * potFile;
+char potFileName[797];
+
+strcpy(potFileName, "locale");
+__ecereNameSpace__ecere__sys__MakeDir(potFileName);
+__ecereNameSpace__ecere__sys__PathCat(potFileName, projectName);
+__ecereNameSpace__ecere__sys__ChangeExtension(potFileName, "pot", potFileName);
+potFile = __ecereNameSpace__ecere__sys__FileOpen(potFileName, 2);
+if(potFile)
+{
+{
+struct __ecereNameSpace__ecere__com__MapIterator i = (i.container = (void *)0, i.pointer = (void *)0, __ecereProp___ecereNameSpace__ecere__com__MapIterator_Set_map(&i, (intlStrings)), i);
+
+while(__ecereMethod___ecereNameSpace__ecere__com__Iterator_Next(&i))
+{
+struct ContextStringPair pair = (*(struct ContextStringPair *)__ecereProp___ecereNameSpace__ecere__com__MapIterator_Get_key(&i));
+struct __ecereNameSpace__ecere__com__Instance * comments = ((struct __ecereNameSpace__ecere__com__Instance *)__ecereProp___ecereNameSpace__ecere__com__Iterator_Get_data(&i));
+
+{
+struct __ecereNameSpace__ecere__com__Iterator s = 
+{
+(comments), 0
+};
+
+while(__ecereMethod___ecereNameSpace__ecere__com__Iterator_Next(&s))
+{
+__ecereMethod___ecereNameSpace__ecere__sys__File_Printf(potFile, __ecereProp___ecereNameSpace__ecere__com__Iterator_Get_data(&s));
+((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))potFile->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(potFile, "\n");
+}
+}
+((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))potFile->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(potFile, "msgid \"");
+((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))potFile->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(potFile, pair.string);
+((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))potFile->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(potFile, "\"\n");
+if(pair.context)
+{
+((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))potFile->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(potFile, "msgctxt \"");
+((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))potFile->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(potFile, pair.context);
+((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))potFile->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(potFile, "\"\n");
+}
+((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))potFile->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(potFile, "msgstr \"");
+((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))potFile->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(potFile, pair.string);
+((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))potFile->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(potFile, "\"\n");
+((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))potFile->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(potFile, "\n");
+}
+}
+((void (*)(struct __ecereNameSpace__ecere__com__Instance *))intlStrings->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__com__Container_Free])(intlStrings);
+(__ecereNameSpace__ecere__com__eInstance_DecRef(intlStrings), intlStrings = 0);
+(__ecereNameSpace__ecere__com__eInstance_DecRef(potFile), potFile = 0);
+}
+}
 }
 FreeContext(theGlobalContext);
 FreeExcludedSymbols(&_excludedSymbols);
@@ -2335,8 +2622,6 @@ SetSymbolsDir((((void *)0)));
 
 extern struct __ecereNameSpace__ecere__com__Class * __ecereNameSpace__ecere__com__eSystem_RegisterClass(int type, char *  name, char *  baseName, int size, int sizeClass, unsigned int (* )(void * ), void (* )(void * ), struct __ecereNameSpace__ecere__com__Instance * module, int declMode, int inheritanceAccess);
 
-extern struct __ecereNameSpace__ecere__com__Instance * __thisModule;
-
 extern struct __ecereNameSpace__ecere__com__Method * __ecereNameSpace__ecere__com__eClass_AddMethod(struct __ecereNameSpace__ecere__com__Class * _class, char *  name, char *  type, void *  function, int declMode);
 
 void __ecereRegisterModule_ecs(struct __ecereNameSpace__ecere__com__Instance * module)