1 /* Code generated from eC source file: String.ec */
3 #define __runtimePlatform 1
4 #elif defined(__APPLE__)
5 #define __runtimePlatform 3
7 #define __runtimePlatform 2
10 typedef long long int64;
11 typedef unsigned long long uint64;
15 #elif defined(__TINYC__)
17 #define __builtin_va_list va_list
18 #define __builtin_va_start va_start
19 #define __builtin_va_end va_end
21 #define strcasecmp stricmp
22 #define strncasecmp strnicmp
23 #define __declspec(x) __attribute__((x))
27 typedef long long int64;
28 typedef unsigned long long uint64;
30 typedef __int64 int64;
31 typedef unsigned __int64 uint64;
34 #define __ENDIAN_PAD(x) (8 - (x))
36 #define __ENDIAN_PAD(x) 0
39 #include <sys/types.h>
40 void exit(int status);
42 void * calloc(size_t nmemb, size_t size);
44 void free(void * ptr);
46 void * malloc(size_t size);
48 void * realloc(void * ptr, size_t size);
50 long int strtol(const char * nptr, char ** endptr, int base);
52 long long int strtoll(const char * nptr, char ** endptr, int base);
54 unsigned long long int strtoull(const char * nptr, char ** endptr, int base);
56 extern int runtimePlatform;
65 void __ecereNameSpace__ecere__sys__ChangeCh(char * string, char ch1, char ch2)
69 for(c = 0; string[c]; c++)
74 void __ecereNameSpace__ecere__sys__RepeatCh(char * string, int count, char ch)
78 for(c = 0; c < count; c++)
83 unsigned int __ecereNameSpace__ecere__sys__GetString(char ** buffer, char * string, int max)
87 unsigned int quoted = 0;
88 unsigned int result = 1;
97 if(!(ch = *((*buffer)++)))
99 if((ch != '\n') && (ch != '\r') && (ch != ' ') && (ch != ',') && (ch != '\t'))
106 for(c = 0; c < max - 1; c++)
108 if(!quoted && ((ch == '\n') || (ch == '\r') || (ch == ' ') || (ch == ',') || (ch == '\t')))
115 quoted ^= (unsigned int)1;
120 if(!(ch = *(*buffer)))
132 struct __ecereNameSpace__ecere__sys__BTNode;
134 struct __ecereNameSpace__ecere__sys__OldList
141 } __attribute__ ((gcc_struct));
143 struct __ecereNameSpace__ecere__com__DataValue
158 } __attribute__ ((gcc_struct)) __anon1;
159 } __attribute__ ((gcc_struct));
161 struct __ecereNameSpace__ecere__com__SerialBuffer
163 unsigned char * _buffer;
167 } __attribute__ ((gcc_struct));
169 extern void * __ecereNameSpace__ecere__com__eSystem_New(unsigned int size);
171 extern void * __ecereNameSpace__ecere__com__eSystem_New0(unsigned int size);
173 extern void * __ecereNameSpace__ecere__com__eSystem_Renew(void * memory, unsigned int size);
175 extern void * __ecereNameSpace__ecere__com__eSystem_Renew0(void * memory, unsigned int size);
177 extern void __ecereNameSpace__ecere__com__eSystem_Delete(void * memory);
179 extern size_t strlen(const char * );
181 extern char * strcpy(char * , const char * );
183 extern int strcmp(const char * , const char * );
185 extern void * memmove(void * , const void * , size_t size);
187 extern char * strncpy(char * , const char * , size_t n);
189 extern char * strstr(const char * , const char * );
191 extern void * memcpy(void * , const void * , size_t size);
193 extern int toupper(int);
195 extern char * strcat(char * , const char * );
197 extern int sprintf(char * , const char * , ...);
199 extern int strcasecmp(const char * , const char * );
201 extern int strncmp(const char * , const char * , size_t n);
203 extern int strncasecmp(const char * , const char * , size_t n);
205 extern int tolower(int);
207 extern int isalnum(int c);
209 extern char * strchr(const char * , int);
211 extern int atoi(const char * );
213 extern unsigned long strtoul(const char * nptr, char * * endptr, int base);
215 extern unsigned int isdigit(int);
217 struct __ecereNameSpace__ecere__com__DefinedExpression;
219 struct __ecereNameSpace__ecere__com__GlobalFunction;
221 unsigned int __ecereNameSpace__ecere__sys__StripExtension(char * string)
225 for(c = strlen(string); c >= 0; c--)
231 else if(string[c] == '\\' || string[c] == '/')
236 char * __ecereNameSpace__ecere__sys__GetExtension(const char * string, char * output)
240 int len = strlen(string);
241 int limit = (__simpleStruct0 = len - (17), (0 > __simpleStruct0) ? 0 : __simpleStruct0);
244 for(c = len; c >= limit; c--)
250 strcpy(output, string + c + 1);
253 else if(ch == '/' || ch == '\\')
259 char * __ecereNameSpace__ecere__sys__StripLastDirectory(const char * string, char * output)
263 if(runtimePlatform == 1 && !strcmp(string, "\\\\"))
270 int len = strlen(string);
272 for(c = len - 2; c >= 0; c--)
273 if(string[c] == '/' || string[c] == '\\')
275 else if(string[c] == '>' || (string[c] == ':' && c == 0))
280 if((runtimePlatform == 1) ? (c >= 0) : (c > 0))
282 memmove(output, string, c);
285 if(runtimePlatform == 1 && c == 1 && output[0] == '\\' && output[1] == '\\')
291 strcpy(output, ((__runtimePlatform == 1) ? "\\" : "/"));
298 strcpy(output, ((__runtimePlatform == 1) ? "\\" : "/"));
304 return (((void *)0));
310 char * __ecereNameSpace__ecere__sys__SplitDirectory(const char * string, char * part, char * rest)
316 for(; (ch = string[c]) && (ch == '/' || ch == '\\'); c++)
319 part[len++] = ((__runtimePlatform == 1) ? '\\' : '/');
322 for(; (ch = string[c]) && (ch != '/' && ch != '\\'); c++)
328 for(; (ch = string[c]) && (ch == '/' || ch == '\\'); c++)
330 memmove(rest, string + c, strlen(string + c) + 1);
331 for(c = strlen(rest); c >= 0; c--)
332 if(ch != '/' && ch != '\\')
340 char * __ecereNameSpace__ecere__sys__GetLastDirectory(const char * string, char * output)
343 int len = string ? strlen(string) : 0;
345 for(c = len - 2; c >= 0; c--)
346 if(string[c] == '/' || string[c] == '\\' || string[c] == ':' || string[c] == '>')
350 memmove(output, string + c, strlen(string + c) + 1);
353 len = strlen(output);
354 if(len > 1 && (output[len - 1] == '\\' || output[len - 1] == '/'))
355 output[len - 1] = '\0';
359 char * __ecereNameSpace__ecere__sys__TrimLSpaces(const char * string, char * output)
363 for(c = 0; string[c] && string[c] == ' '; c++)
365 memmove(output, string + c, strlen(string + c) + 1);
369 char * __ecereNameSpace__ecere__sys__TrimRSpaces(const char * string, char * output)
373 for(c = strlen(string) - 1; c >= 0 && string[c] == ' '; c--)
377 memmove(output, string, c + 1);
378 output[c + 1] = '\0';
385 char * __ecereNameSpace__ecere__sys__StripQuotes(const char * string, char * output)
388 const char * src = (string[0] == '\"') ? (string + 1) : string;
390 memmove(output, src, strlen(src) + 1);
391 len = strlen(output);
392 if(len && output[len - 1] == '\"')
393 output[len - 1] = '\0';
397 unsigned int __ecereNameSpace__ecere__sys__SplitArchivePath(const char * fileName, char * archiveName, const char ** archiveFile)
399 if(fileName[0] == '<')
401 int c = strlen(fileName);
403 for(; c > 0 && fileName[c] != '>'; c--)
407 strncpy(archiveName, fileName + 1, c - 1);
408 archiveName[c - 1] = '\0';
409 *archiveFile = fileName + c + 1;
413 else if(fileName[0] == ':')
415 strcpy(archiveName, ":");
416 *archiveFile = fileName + 1;
422 char * __ecereNameSpace__ecere__sys__CopyString(const char * string)
426 int len = strlen(string);
427 char * destination = __ecereNameSpace__ecere__com__eSystem_New(sizeof(char) * (len + 1));
430 memcpy(destination, string, len + 1);
434 return (((void *)0));
437 void __ecereNameSpace__ecere__sys__PrintSize(char * string, unsigned int size, int prec)
443 sprintf(format, "%%.0%df", prec);
444 if(size > 1024 * 1024 * 1024)
446 sprintf(string, format, (float)size / (float)((float)(float)(1024 * 1024 * 1024)));
447 strcat(string, " GB");
449 else if(size > 1024 * 1024)
451 sprintf(string, format, (float)size / (float)((float)(float)(1024 * 1024)));
452 strcat(string, " MB");
456 sprintf(string, format, (float)size / (float)1024);
457 strcat(string, " KB");
461 sprintf(string, "%d B", size);
464 void __ecereNameSpace__ecere__sys__PrintBigSize(char * string, double size, int prec)
466 if(size > (double)1024)
470 sprintf(format, "%%.0%df", prec);
471 if(size > 1024.0 * 1024.0 * 1024.0 * 1024.0)
473 sprintf(string, format, size / ((double)(double)(1024 * 1024) * 1024.0 * 1024.0));
474 strcat(string, " TB");
476 else if(size > 1024.0 * 1024.0 * 1024.0)
478 sprintf(string, format, size / (1024.0 * 1024.0 * 1024.0));
479 strcat(string, " GB");
481 else if(size > 1024.0 * 1024.0)
483 sprintf(string, format, size / (1024.0 * 1024.0));
484 strcat(string, " MB");
488 sprintf(string, format, size / 1024.0);
489 strcat(string, " KB");
493 sprintf(string, "%.0f B", size);
496 char * __ecereNameSpace__ecere__sys__SearchString(const char * buffer, int start, const char * subStr, unsigned int matchCase, unsigned int matchWord)
501 const char * strBuffer = buffer + start;
502 int subLen = strlen(subStr);
503 char beforeChar = start ? *(strBuffer - 1) : (char)0;
504 int (* strcompare)(const char *, const char *, size_t) = (void *)(matchCase ? (void *)(strncmp) : ((void *)(strncasecmp)));
506 for(ptr = strBuffer; *ptr; ptr++)
508 if(matchCase ? (*subStr == *ptr) : (tolower(*subStr) == tolower(*ptr)))
512 if(!strcompare(ptr, subStr, subLen) && (!((subStr[subLen - 1]) == '_' || isalnum((subStr[subLen - 1]))) || !((ptr[subLen]) == '_' || isalnum((ptr[subLen])))) && (!((subStr[0]) == '_' || isalnum((subStr[0]))) || !((beforeChar) == '_' || isalnum((beforeChar)))))
517 if(!strcompare(ptr, subStr, subLen))
524 return (((void *)0));
527 char * __ecereNameSpace__ecere__sys__RSearchString(const char * buffer, const char * subStr, int maxLen, unsigned int matchCase, unsigned int matchWord)
531 int subLen = strlen(subStr);
532 const char * ptr1 = buffer + maxLen - subLen;
533 const char * ptr2 = buffer + maxLen - subLen - 1;
534 int (* strcompare)(const char *, const char *, size_t) = (void *)(matchCase ? (void *)(strncmp) : ((void *)(strncasecmp)));
536 for(; ptr1 >= buffer; ptr1--, ptr2--)
538 if(tolower(*subStr) == tolower(*ptr1))
542 if(!strcompare(ptr1, subStr, subLen) && (!((subStr[subLen - 1]) == '_' || isalnum((subStr[subLen - 1]))) || !((ptr1[subLen]) == '_' || isalnum((ptr1[subLen])))) && (!((subStr[0]) == '_' || isalnum((subStr[0]))) || !((*ptr2) == '_' || isalnum((*ptr2)))))
547 if(!strcompare(ptr1, subStr, subLen))
553 return (((void *)0));
556 int __ecereNameSpace__ecere__sys__Tokenize(char * string, int maxTokens, char * tokens[], unsigned int esc)
558 const char * escChars, * escCharsQuoted;
560 unsigned int quoted = 0, escaped = 0;
561 char * start = (((void *)0)), * output = string;
564 if(__runtimePlatform == 1)
566 escChars = " !\"%&'()+,;=[]^`{}~";
567 escCharsQuoted = "\"";
571 escChars = " !\"$&'()*:;<=>?[\\`{|";
572 escCharsQuoted = "\"()$";
574 for(; (ch = *string) && count < maxTokens; string++, output++)
576 unsigned int wasEscaped = escaped;
593 else if(ch == ' ' && !quoted)
595 tokens[count++] = start;
597 start = (((void *)0));
610 if(!wasEscaped && ch == '\\' && (esc == 1 || (esc == 2 && strchr(quoted ? escCharsQuoted : escChars, *(string + 1)))))
613 if(start && count < maxTokens)
615 tokens[count++] = start;
621 int __ecereNameSpace__ecere__sys__TokenizeWith(char * string, int maxTokens, char * tokens[], const char * tokenizers, unsigned int escapeBackSlashes)
624 unsigned int quoted = 0;
625 char * start = (((void *)0));
626 unsigned int escaped = 0;
627 char * output = string;
628 unsigned int quotedFromStart = 0;
630 for(; *string && count < maxTokens; string++, output++)
643 else if(escapeBackSlashes && *string == '\\')
645 else if(*string == '\"')
657 else if(strchr(tokenizers, *string) && !quoted)
659 tokens[count++] = start;
661 start = (((void *)0));
664 else if(!strchr(tokenizers, *string))
675 if(*string == '\\' && escapeBackSlashes)
680 if(start && count < maxTokens)
682 tokens[count++] = start;
688 void __ecereNameSpace__ecere__sys__ChangeChars(char * string, const char * chars, char alt)
692 for(c = 0; string[c]; c++)
693 if(strchr(chars, string[c]))
697 int __ecereNameSpace__ecere__sys__GetValue(char ** buffer)
701 __ecereNameSpace__ecere__sys__GetString(buffer, string, 20);
705 unsigned int __ecereNameSpace__ecere__sys__GetHexValue(char ** buffer)
709 __ecereNameSpace__ecere__sys__GetString(buffer, string, 20);
710 return (unsigned int)strtoul(string, (((void *)0)), 16);
713 double __ecereNameSpace__ecere__sys__FloatFromString(const char * string)
716 float dec = 0, res = 0;
720 for(c = 0; string[c]; c++)
731 else if((ch == '.') && !dec)
738 res += (float)dig / dec;
742 res = res * (float)10 + (float)dig;
747 return (float)neg * res;
750 char * __ecereNameSpace__ecere__sys__ChangeExtension(const char * string, const char * ext, char * output)
753 strcpy(output, string);
754 __ecereNameSpace__ecere__sys__StripExtension(output);
761 unsigned int __ecereNameSpace__ecere__sys__IsPathInsideOf(const char * path, const char * of)
763 if(!path[0] || !of[0])
767 char ofPart[274], ofRest[797];
768 char pathPart[274], pathRest[797];
771 strcpy(pathRest, path);
772 for(; ofRest[0] && pathRest[0]; )
774 __ecereNameSpace__ecere__sys__SplitDirectory(ofRest, ofPart, ofRest);
775 __ecereNameSpace__ecere__sys__SplitDirectory(pathRest, pathPart, pathRest);
776 if(((__runtimePlatform == 1) ? (strcasecmp) : strcmp)(pathPart, ofPart))
779 if(!ofRest[0] && !pathRest[0])
781 else if(!pathRest[0])
787 char * __ecereNameSpace__ecere__sys__PathCatSlash(char * string, const char * addedPath)
789 unsigned int modified = 0;
793 char fileName[797] = "", archiveName[797] = "";
794 const char * file = (((void *)0));
796 unsigned int isURL = 0;
797 unsigned int isArchive = __ecereNameSpace__ecere__sys__SplitArchivePath(string, archiveName, &file);
798 char * urlFileName = (((void *)0));
799 char * protocolSymbol;
801 strcpy(fileName, isArchive ? file : string);
804 protocolSymbol = (fileName[0] && fileName[0] != '.' && fileName[0] != '/' && fileName[0] != '\\' && fileName[1] != ':') ? strstr(fileName, "://") : (((void *)0));
807 char * slash = strstr(protocolSymbol + 3, "/");
813 urlFileName = fileName + strlen(fileName);
816 protocolSymbol = (addedPath[0] && addedPath[0] != '.' && addedPath[0] != '/' && addedPath[0] != '\\' && addedPath[1] != ':') ? strstr(addedPath, "://") : (((void *)0));
819 int len = protocolSymbol - addedPath + 3;
821 memcpy(fileName, addedPath, len);
822 fileName[len] = (char)0;
826 else if(__runtimePlatform == 1)
828 if(addedPath[0] && addedPath[1] == ':' && addedPath[0] != '<')
830 fileName[0] = (char)toupper(addedPath[0]);
836 else if(addedPath[0] == '\\' && addedPath[1] == '\\')
838 fileName[0] = fileName[1] = '\\';
844 if(!modified && isURL && (addedPath[0] == '\\' || addedPath[0] == '/'))
846 urlFileName[0] = '/';
847 urlFileName[1] = '\0';
849 else if(!modified && (addedPath[0] == '\\' || addedPath[0] == '/'))
851 if(__runtimePlatform == 1)
853 if(addedPath[0] == '/' && !addedPath[1])
855 fileName[0] = addedPath[0];
859 else if(fileName[0] && fileName[1] == ':')
879 for(; addedPath[c]; )
881 char directory[4384];
886 for(; (ch = addedPath[c]) && (ch == '/' || ch == '\\'); c++)
888 for(; (ch = addedPath[c]) && (ch != '/' && ch != '\\'); c++)
890 if(isURL && ch == '?')
895 directory[len++] = ch;
897 directory[len] = '\0';
898 for(count = len - 1; count >= 0 && (directory[count] == ' ' || directory[count] == '\t'); count--)
900 directory[count] = '\0';
906 if(strstr(directory, "..") == directory && (!directory[2] || directory[2] == ((__runtimePlatform == 1) ? '\\' : '/') || directory[2] == '/'))
908 int strLen = strlen(fileName) - 1;
912 for(; strLen > -1 && (ch = fileName[strLen]) && (ch == '/' || ch == '\\'); strLen--)
914 for(; strLen > -1 && (ch = fileName[strLen]) && (ch != '/' && ch != '\\' && ch != ':'); strLen--)
916 for(; strLen > -1 && (ch = fileName[strLen]) && (ch == '/' || ch == '\\'); strLen--)
922 strLen = (__simpleStruct0 = urlFileName - fileName, (strLen > __simpleStruct0) ? strLen : __simpleStruct0);
924 if(!strcmp(fileName + strLen + 1, ".."))
926 strcat(fileName, "/");
927 strcat(fileName, "..");
931 if(__runtimePlatform == 1)
933 if(!strLen && fileName[0] == '\\' && fileName[1] == '\\')
936 return (((void *)0));
945 fileName[strLen + 1] = '\0';
949 fileName[strLen + 1] = '\0';
961 strcpy(fileName, "..");
964 else if(strcmp(directory, "."))
966 int strLen = strlen(fileName);
967 unsigned int notZeroLen = strLen > 0;
969 if(strLen > 0 && (fileName[strLen - 1] == '/' || fileName[strLen - 1] == '\\'))
972 fileName[strLen++] = '/';
973 fileName[strLen] = '\0';
974 if(strLen + strlen(directory) > (797) - 3)
975 return (((void *)0));
976 strcat(fileName, directory);
979 if(isURL && ch == '/')
980 strcat(fileName, "/");
981 if(isURL && ch == '?')
983 strcat(fileName, addedPath + c);
988 sprintf(string, "<%s>%s", archiveName, fileName);
990 strcpy(string, fileName);
992 return modified ? string : (((void *)0));
995 char * __ecereNameSpace__ecere__sys__PathCat(char * string, const char * addedPath)
997 unsigned int modified = 0;
1001 char fileName[797] = "", archiveName[797] = "";
1002 const char * file = (((void *)0));
1004 unsigned int isURL = 0;
1005 unsigned int isArchive = __ecereNameSpace__ecere__sys__SplitArchivePath(string, archiveName, &file);
1006 char * urlFileName = (((void *)0));
1007 char * protocolSymbol;
1009 strcpy(fileName, isArchive ? file : string);
1012 protocolSymbol = (fileName[0] && fileName[0] != '.' && fileName[0] != '/' && fileName[0] != '\\' && fileName[1] != ':') ? strstr(fileName, "://") : (((void *)0));
1015 char * slash = strstr(protocolSymbol + 3, "/");
1019 urlFileName = slash;
1021 urlFileName = fileName + strlen(fileName);
1024 protocolSymbol = (addedPath[0] && addedPath[0] != '.' && addedPath[0] != '/' && addedPath[0] != '\\' && addedPath[1] != ':') ? strstr(addedPath, "://") : (((void *)0));
1027 int len = protocolSymbol - addedPath + 3;
1029 memcpy(fileName, addedPath, len);
1030 fileName[len] = (char)0;
1034 else if(runtimePlatform == 1)
1036 if(addedPath[0] && addedPath[1] == ':' && addedPath[0] != '<')
1038 fileName[0] = (char)toupper(addedPath[0]);
1044 else if(addedPath[0] == '\\' && addedPath[1] == '\\')
1046 fileName[0] = fileName[1] = '\\';
1051 else if(fileName[0] == '/' && !archiveName[0] && strcmp(addedPath, "/"))
1052 return (((void *)0));
1054 if(!modified && isURL && (addedPath[0] == '\\' || addedPath[0] == '/'))
1056 urlFileName[0] = '/';
1057 urlFileName[1] = '\0';
1059 else if(!modified && (addedPath[0] == '\\' || addedPath[0] == '/'))
1061 if(runtimePlatform == 1)
1063 if(addedPath[0] == '/' && !addedPath[1])
1065 fileName[0] = addedPath[0];
1069 else if(fileName[0] && fileName[1] == ':')
1089 for(; addedPath[c]; )
1091 char directory[4384];
1096 for(; (ch = addedPath[c]) && (ch == '/' || ch == '\\'); c++)
1098 for(; (ch = addedPath[c]) && (ch != '/' && ch != '\\'); c++)
1100 if(isURL && ch == '?')
1105 directory[len++] = ch;
1107 directory[len] = '\0';
1108 for(count = len - 1; count >= 0 && (directory[count] == ' ' || directory[count] == '\t'); count--)
1110 directory[count] = '\0';
1116 if(strstr(directory, "..") == directory && (!directory[2] || directory[2] == ((__runtimePlatform == 1) ? '\\' : '/')))
1118 int strLen = strlen(fileName) - 1;
1122 unsigned int separator = 0;
1124 for(; strLen > -1 && (ch = fileName[strLen]) && (ch == '/' || ch == '\\'); strLen--)
1126 for(; strLen > -1 && (ch = fileName[strLen]) && (ch != '/' && ch != '\\' && ch != ':'); strLen--)
1128 for(; strLen > -1 && (ch = fileName[strLen]) && (ch == '/' || ch == '\\'); strLen--)
1132 int __simpleStruct0;
1134 strLen = (__simpleStruct0 = urlFileName - fileName, (strLen > __simpleStruct0) ? strLen : __simpleStruct0);
1136 if(!strcmp(fileName + strLen + (separator ? 2 : 1), ".."))
1138 strcat(fileName, ((__runtimePlatform == 1) ? "\\" : "/"));
1139 strcat(fileName, "..");
1143 if(runtimePlatform == 1)
1145 if(!strLen && fileName[0] == '\\' && fileName[1] == '\\')
1148 return (((void *)0));
1157 fileName[strLen + 1] = '\0';
1161 fileName[strLen + 1] = '\0';
1173 strcpy(fileName, "..");
1176 else if(strcmp(directory, "."))
1178 int strLen = strlen(fileName);
1179 unsigned int notZeroLen = strLen > 0;
1181 if(strLen > 0 && (fileName[strLen - 1] == '/' || fileName[strLen - 1] == '\\'))
1186 fileName[strLen++] = '/';
1188 fileName[strLen++] = ((__runtimePlatform == 1) ? '\\' : '/');
1190 fileName[strLen] = '\0';
1191 if(strLen + strlen(directory) > (797) - 3)
1192 return (((void *)0));
1193 strcat(fileName, directory);
1196 if(isURL && ch == '/')
1197 strcat(fileName, "/");
1198 if(isURL && ch == '?')
1200 strcat(fileName, addedPath + c);
1205 sprintf(string, "<%s>%s", archiveName, fileName);
1207 strcpy(string, fileName);
1209 return modified ? string : (((void *)0));
1212 char * __ecereNameSpace__ecere__sys__MakePathRelative(const char * path, const char * to, char * destination)
1217 memmove(destination, path, strlen(path) + 1);
1220 char pathPart[4384], pathRest[797];
1221 char toPart[4384], toRest[797];
1222 unsigned int different = 0;
1224 strcpy(pathRest, path);
1226 destination[0] = '\0';
1229 __ecereNameSpace__ecere__sys__SplitDirectory(toRest, toPart, toRest);
1231 __ecereNameSpace__ecere__sys__SplitDirectory(pathRest, pathPart, pathRest);
1232 if(different || ((__runtimePlatform == 1) ? (strcasecmp) : strcmp)(toPart, pathPart))
1235 strcat(destination, "..");
1236 strcat(destination, ((__runtimePlatform == 1) ? "\\" : "/"));
1240 __ecereNameSpace__ecere__sys__PathCat(destination, pathPart);
1241 for(; pathRest[0]; )
1243 __ecereNameSpace__ecere__sys__SplitDirectory(pathRest, pathPart, pathRest);
1244 __ecereNameSpace__ecere__sys__PathCat(destination, pathPart);
1247 len = strlen(destination);
1248 if(len > 1 && (destination[len - 1] == '/' || destination[len - 1] == '\\'))
1249 destination[--len] = '\0';
1253 struct __ecereNameSpace__ecere__com__Class;
1255 struct __ecereNameSpace__ecere__com__Instance
1258 struct __ecereNameSpace__ecere__com__Class * _class;
1260 } __attribute__ ((gcc_struct));
1262 extern long long __ecereNameSpace__ecere__com__eClass_GetProperty(struct __ecereNameSpace__ecere__com__Class * _class, const char * name);
1264 extern void __ecereNameSpace__ecere__com__eClass_SetProperty(struct __ecereNameSpace__ecere__com__Class * _class, const char * name, long long value);
1266 extern void __ecereNameSpace__ecere__com__eEnum_AddFixedValue(struct __ecereNameSpace__ecere__com__Class * _class, const char * string, long long value);
1268 extern void __ecereNameSpace__ecere__com__eInstance_SetMethod(struct __ecereNameSpace__ecere__com__Instance * instance, const char * name, void * function);
1270 extern void __ecereNameSpace__ecere__com__eInstance_IncRef(struct __ecereNameSpace__ecere__com__Instance * instance);
1272 struct __ecereNameSpace__ecere__com__Property;
1274 struct __ecereNameSpace__ecere__com__Property
1276 struct __ecereNameSpace__ecere__com__Property * prev;
1277 struct __ecereNameSpace__ecere__com__Property * next;
1279 unsigned int isProperty;
1282 struct __ecereNameSpace__ecere__com__Class * _class;
1283 const char * dataTypeString;
1284 struct __ecereNameSpace__ecere__com__Class * dataTypeClass;
1285 struct __ecereNameSpace__ecere__com__Instance * dataType;
1286 void (* Set)(void * , int);
1287 int (* Get)(void * );
1288 unsigned int (* IsSet)(void * );
1292 unsigned int conversion;
1293 unsigned int watcherOffset;
1294 const char * category;
1295 unsigned int compiled;
1296 unsigned int selfWatchable;
1297 unsigned int isWatchable;
1298 } __attribute__ ((gcc_struct));
1300 extern void __ecereNameSpace__ecere__com__eInstance_FireSelfWatchers(struct __ecereNameSpace__ecere__com__Instance * instance, struct __ecereNameSpace__ecere__com__Property * _property);
1302 extern void __ecereNameSpace__ecere__com__eInstance_StopWatching(struct __ecereNameSpace__ecere__com__Instance * instance, struct __ecereNameSpace__ecere__com__Property * _property, struct __ecereNameSpace__ecere__com__Instance * object);
1304 extern void __ecereNameSpace__ecere__com__eInstance_Watch(void * instance, struct __ecereNameSpace__ecere__com__Property * _property, void * object, void (* callback)(void * , void * ));
1306 extern void __ecereNameSpace__ecere__com__eInstance_FireWatchers(struct __ecereNameSpace__ecere__com__Instance * instance, struct __ecereNameSpace__ecere__com__Property * _property);
1308 struct __ecereNameSpace__ecere__sys__BinaryTree;
1310 struct __ecereNameSpace__ecere__sys__BinaryTree
1312 struct __ecereNameSpace__ecere__sys__BTNode * root;
1314 int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, uintptr_t a, uintptr_t b);
1315 void (* FreeKey)(void * key);
1316 } __attribute__ ((gcc_struct));
1318 struct __ecereNameSpace__ecere__com__Method;
1320 struct __ecereNameSpace__ecere__com__Method
1323 struct __ecereNameSpace__ecere__com__Method * parent;
1324 struct __ecereNameSpace__ecere__com__Method * left;
1325 struct __ecereNameSpace__ecere__com__Method * right;
1330 struct __ecereNameSpace__ecere__com__Class * _class;
1332 const char * dataTypeString;
1333 struct __ecereNameSpace__ecere__com__Instance * dataType;
1335 } __attribute__ ((gcc_struct));
1337 struct __ecereNameSpace__ecere__com__Module;
1339 extern struct __ecereNameSpace__ecere__com__DefinedExpression * __ecereNameSpace__ecere__com__eSystem_RegisterDefine(const char * name, const char * value, struct __ecereNameSpace__ecere__com__Instance * module, int declMode);
1341 extern struct __ecereNameSpace__ecere__com__GlobalFunction * __ecereNameSpace__ecere__com__eSystem_RegisterFunction(const char * name, const char * type, void * func, struct __ecereNameSpace__ecere__com__Instance * module, int declMode);
1343 extern struct __ecereNameSpace__ecere__com__Class * __ecereNameSpace__ecere__com__eSystem_RegisterClass(int type, const char * name, const char * baseName, int size, int sizeClass, unsigned int (* Constructor)(void * ), void (* Destructor)(void * ), struct __ecereNameSpace__ecere__com__Instance * module, int declMode, int inheritanceAccess);
1345 extern struct __ecereNameSpace__ecere__com__Instance * __thisModule;
1347 struct __ecereNameSpace__ecere__com__NameSpace;
1349 struct __ecereNameSpace__ecere__com__NameSpace
1352 struct __ecereNameSpace__ecere__com__NameSpace * btParent;
1353 struct __ecereNameSpace__ecere__com__NameSpace * left;
1354 struct __ecereNameSpace__ecere__com__NameSpace * right;
1356 struct __ecereNameSpace__ecere__com__NameSpace * parent;
1357 struct __ecereNameSpace__ecere__sys__BinaryTree nameSpaces;
1358 struct __ecereNameSpace__ecere__sys__BinaryTree classes;
1359 struct __ecereNameSpace__ecere__sys__BinaryTree defines;
1360 struct __ecereNameSpace__ecere__sys__BinaryTree functions;
1361 } __attribute__ ((gcc_struct));
1363 struct __ecereNameSpace__ecere__com__Application
1366 const char * * argv;
1368 unsigned int isGUIApp;
1369 struct __ecereNameSpace__ecere__sys__OldList allModules;
1370 char * parsedCommand;
1371 struct __ecereNameSpace__ecere__com__NameSpace systemNameSpace;
1372 } __attribute__ ((gcc_struct));
1374 struct __ecereNameSpace__ecere__com__Module
1376 struct __ecereNameSpace__ecere__com__Instance * application;
1377 struct __ecereNameSpace__ecere__sys__OldList classes;
1378 struct __ecereNameSpace__ecere__sys__OldList defines;
1379 struct __ecereNameSpace__ecere__sys__OldList functions;
1380 struct __ecereNameSpace__ecere__sys__OldList modules;
1381 struct __ecereNameSpace__ecere__com__Instance * prev;
1382 struct __ecereNameSpace__ecere__com__Instance * next;
1388 struct __ecereNameSpace__ecere__com__NameSpace privateNameSpace;
1389 struct __ecereNameSpace__ecere__com__NameSpace publicNameSpace;
1390 } __attribute__ ((gcc_struct));
1392 void __ecereUnregisterModule_String(struct __ecereNameSpace__ecere__com__Instance * module)
1397 struct __ecereNameSpace__ecere__com__DataMember;
1399 struct __ecereNameSpace__ecere__com__ClassTemplateArgument
1405 const char * dataTypeString;
1406 struct __ecereNameSpace__ecere__com__Class * dataTypeClass;
1407 } __attribute__ ((gcc_struct)) __anon1;
1408 struct __ecereNameSpace__ecere__com__DataValue expression;
1411 const char * memberString;
1414 struct __ecereNameSpace__ecere__com__DataMember * member;
1415 struct __ecereNameSpace__ecere__com__Property * prop;
1416 struct __ecereNameSpace__ecere__com__Method * method;
1417 } __attribute__ ((gcc_struct)) __anon1;
1418 } __attribute__ ((gcc_struct)) __anon2;
1419 } __attribute__ ((gcc_struct)) __anon1;
1420 } __attribute__ ((gcc_struct));
1422 struct __ecereNameSpace__ecere__com__DataMember
1424 struct __ecereNameSpace__ecere__com__DataMember * prev;
1425 struct __ecereNameSpace__ecere__com__DataMember * next;
1427 unsigned int isProperty;
1430 struct __ecereNameSpace__ecere__com__Class * _class;
1431 const char * dataTypeString;
1432 struct __ecereNameSpace__ecere__com__Class * dataTypeClass;
1433 struct __ecereNameSpace__ecere__com__Instance * dataType;
1437 struct __ecereNameSpace__ecere__sys__OldList members;
1438 struct __ecereNameSpace__ecere__sys__BinaryTree membersAlpha;
1440 short structAlignment;
1441 short pointerAlignment;
1442 } __attribute__ ((gcc_struct));
1444 struct __ecereNameSpace__ecere__com__Class
1446 struct __ecereNameSpace__ecere__com__Class * prev;
1447 struct __ecereNameSpace__ecere__com__Class * next;
1453 unsigned int (* Constructor)(void * );
1454 void (* Destructor)(void * );
1457 struct __ecereNameSpace__ecere__com__Class * base;
1458 struct __ecereNameSpace__ecere__sys__BinaryTree methods;
1459 struct __ecereNameSpace__ecere__sys__BinaryTree members;
1460 struct __ecereNameSpace__ecere__sys__BinaryTree prop;
1461 struct __ecereNameSpace__ecere__sys__OldList membersAndProperties;
1462 struct __ecereNameSpace__ecere__sys__BinaryTree classProperties;
1463 struct __ecereNameSpace__ecere__sys__OldList derivatives;
1467 struct __ecereNameSpace__ecere__com__Instance * module;
1468 struct __ecereNameSpace__ecere__com__NameSpace * nameSpace;
1469 const char * dataTypeString;
1470 struct __ecereNameSpace__ecere__com__Instance * dataType;
1472 int defaultAlignment;
1473 void (* Initialize)();
1475 struct __ecereNameSpace__ecere__sys__OldList selfWatchers;
1476 const char * designerClass;
1477 unsigned int noExpansion;
1478 const char * defaultProperty;
1479 unsigned int comRedefinition;
1482 unsigned int internalDecl;
1484 unsigned int computeSize;
1485 short structAlignment;
1486 short pointerAlignment;
1487 int destructionWatchOffset;
1489 struct __ecereNameSpace__ecere__sys__OldList delayedCPValues;
1490 int inheritanceAccess;
1491 const char * fullName;
1493 struct __ecereNameSpace__ecere__sys__OldList conversions;
1494 struct __ecereNameSpace__ecere__sys__OldList templateParams;
1495 struct __ecereNameSpace__ecere__com__ClassTemplateArgument * templateArgs;
1496 struct __ecereNameSpace__ecere__com__Class * templateClass;
1497 struct __ecereNameSpace__ecere__sys__OldList templatized;
1499 unsigned int isInstanceClass;
1500 unsigned int byValueSystemClass;
1501 } __attribute__ ((gcc_struct));
1503 static struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__BackSlashEscaping;
1505 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Module;
1507 void __ecereRegisterModule_String(struct __ecereNameSpace__ecere__com__Instance * module)
1509 struct __ecereNameSpace__ecere__com__Class __attribute__((unused)) * class;
1511 __ecereNameSpace__ecere__com__eSystem_RegisterDefine("ecere::sys::DIR_SEP", "(__runtimePlatform == win32) ? '\\\\' : '/'", module, 4);
1512 __ecereNameSpace__ecere__com__eSystem_RegisterDefine("ecere::sys::DIR_SEPS", "(__runtimePlatform == win32) ? \"\\\\\" : \"/\"", module, 4);
1513 __ecereNameSpace__ecere__com__eSystem_RegisterDefine("ecere::sys::MAX_F_STRING", "1025", module, 4);
1514 __ecereNameSpace__ecere__com__eSystem_RegisterDefine("ecere::sys::MAX_EXTENSION", "17", module, 4);
1515 __ecereNameSpace__ecere__com__eSystem_RegisterDefine("ecere::sys::MAX_FILENAME", "274", module, 4);
1516 __ecereNameSpace__ecere__com__eSystem_RegisterDefine("ecere::sys::MAX_DIRECTORY", "534", module, 4);
1517 __ecereNameSpace__ecere__com__eSystem_RegisterDefine("ecere::sys::MAX_LOCATION", "797", module, 4);
1518 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::GetExtension", "char * ecere::sys::GetExtension(const char * string, char * output)", __ecereNameSpace__ecere__sys__GetExtension, module, 4);
1519 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::StripLastDirectory", "char * ecere::sys::StripLastDirectory(const char * string, char * output)", __ecereNameSpace__ecere__sys__StripLastDirectory, module, 4);
1520 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::SplitDirectory", "char * ecere::sys::SplitDirectory(const char * string, char * part, char * rest)", __ecereNameSpace__ecere__sys__SplitDirectory, module, 4);
1521 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::GetLastDirectory", "char * ecere::sys::GetLastDirectory(const char * string, char * output)", __ecereNameSpace__ecere__sys__GetLastDirectory, module, 4);
1522 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::SplitArchivePath", "bool ecere::sys::SplitArchivePath(const char * fileName, char * archiveName, const char * * archiveFile)", __ecereNameSpace__ecere__sys__SplitArchivePath, module, 4);
1523 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::PathCatSlash", "char * ecere::sys::PathCatSlash(char * string, const char * addedPath)", __ecereNameSpace__ecere__sys__PathCatSlash, module, 4);
1524 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::PathCat", "char * ecere::sys::PathCat(char * string, const char * addedPath)", __ecereNameSpace__ecere__sys__PathCat, module, 4);
1525 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::MakePathRelative", "char * ecere::sys::MakePathRelative(const char * path, const char * to, char * destination)", __ecereNameSpace__ecere__sys__MakePathRelative, module, 4);
1526 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::StripExtension", "bool ecere::sys::StripExtension(char * string)", __ecereNameSpace__ecere__sys__StripExtension, module, 4);
1527 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::ChangeExtension", "char * ecere::sys::ChangeExtension(const char * string, const char * ext, char * output)", __ecereNameSpace__ecere__sys__ChangeExtension, module, 4);
1528 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::PrintSize", "void ecere::sys::PrintSize(char * string, uint size, int prec)", __ecereNameSpace__ecere__sys__PrintSize, module, 4);
1529 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::PrintBigSize", "void ecere::sys::PrintBigSize(char * string, double size, int prec)", __ecereNameSpace__ecere__sys__PrintBigSize, module, 4);
1530 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::SearchString", "char * ecere::sys::SearchString(const char * buffer, int start, const char * subStr, bool matchCase, bool matchWord)", __ecereNameSpace__ecere__sys__SearchString, module, 4);
1531 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::RSearchString", "char * ecere::sys::RSearchString(const char * buffer, const char * subStr, int maxLen, bool matchCase, bool matchWord)", __ecereNameSpace__ecere__sys__RSearchString, module, 4);
1532 class = __ecereNameSpace__ecere__com__eSystem_RegisterClass(4, "ecere::sys::BackSlashEscaping", "bool", 0, 0, (void *)0, (void *)0, module, 4, 1);
1533 if(((struct __ecereNameSpace__ecere__com__Module *)(((char *)module + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->application == ((struct __ecereNameSpace__ecere__com__Module *)(((char *)__thisModule + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->application && class)
1534 __ecereClass___ecereNameSpace__ecere__sys__BackSlashEscaping = class;
1535 __ecereNameSpace__ecere__com__eEnum_AddFixedValue(class, "forArgsPassing", 2);
1536 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::Tokenize", "int ecere::sys::Tokenize(char * string, int maxTokens, char * tokens[], ecere::sys::BackSlashEscaping esc)", __ecereNameSpace__ecere__sys__Tokenize, module, 4);
1537 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::TokenizeWith", "int ecere::sys::TokenizeWith(char * string, int maxTokens, char * tokens[], const char * tokenizers, bool escapeBackSlashes)", __ecereNameSpace__ecere__sys__TokenizeWith, module, 4);
1538 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::TrimLSpaces", "char * ecere::sys::TrimLSpaces(const char * string, char * output)", __ecereNameSpace__ecere__sys__TrimLSpaces, module, 4);
1539 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::TrimRSpaces", "char * ecere::sys::TrimRSpaces(const char * string, char * output)", __ecereNameSpace__ecere__sys__TrimRSpaces, module, 4);
1540 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::ChangeCh", "void ecere::sys::ChangeCh(char * string, char ch1, char ch2)", __ecereNameSpace__ecere__sys__ChangeCh, module, 4);
1541 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::ChangeChars", "void ecere::sys::ChangeChars(char * string, const char * chars, char alt)", __ecereNameSpace__ecere__sys__ChangeChars, module, 4);
1542 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::RepeatCh", "void ecere::sys::RepeatCh(char * string, int count, char ch)", __ecereNameSpace__ecere__sys__RepeatCh, module, 4);
1543 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::CopyString", "char * ecere::sys::CopyString(const char * string)", __ecereNameSpace__ecere__sys__CopyString, module, 4);
1544 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::GetString", "bool ecere::sys::GetString(char * * buffer, char * string, int max)", __ecereNameSpace__ecere__sys__GetString, module, 4);
1545 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::GetValue", "int ecere::sys::GetValue(char * * buffer)", __ecereNameSpace__ecere__sys__GetValue, module, 4);
1546 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::GetHexValue", "uint ecere::sys::GetHexValue(char * * buffer)", __ecereNameSpace__ecere__sys__GetHexValue, module, 4);
1547 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::StripQuotes", "char * ecere::sys::StripQuotes(const char * string, char * output)", __ecereNameSpace__ecere__sys__StripQuotes, module, 4);
1548 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::FloatFromString", "double ecere::sys::FloatFromString(const char * string)", __ecereNameSpace__ecere__sys__FloatFromString, module, 4);
1549 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::IsPathInsideOf", "bool ecere::sys::IsPathInsideOf(const char * path, const char * of)", __ecereNameSpace__ecere__sys__IsPathInsideOf, module, 4);