1 /* Code generated from eC source file: String.ec */
3 typedef long long int64;
4 typedef unsigned long long uint64;
8 #elif defined(__TINYC__)
10 #define __builtin_va_list va_list
11 #define __builtin_va_start va_start
12 #define __builtin_va_end va_end
14 #define strcasecmp stricmp
15 #define strncasecmp strnicmp
16 #define __declspec(x) __attribute__((x))
20 typedef long long int64;
21 typedef unsigned long long uint64;
23 typedef __int64 int64;
24 typedef unsigned __int64 uint64;
27 #define __ENDIAN_PAD(x) (8 - (x))
29 #define __ENDIAN_PAD(x) 0
32 #include <sys/types.h>
34 #if (defined(__WORDSIZE) && __WORDSIZE == 8) || defined(__x86_64__)
40 #define arch_PointerSize sizeof(void *)
41 #define structSize_Instance (_64BIT ? 24 : 12)
43 extern void * __ecereNameSpace__ecere__com__eSystem_New(unsigned int size);
45 extern void * __ecereNameSpace__ecere__com__eSystem_New0(unsigned int size);
47 extern void * __ecereNameSpace__ecere__com__eSystem_Renew(void * memory, unsigned int size);
49 extern void * __ecereNameSpace__ecere__com__eSystem_Renew0(void * memory, unsigned int size);
51 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__BTNode;
53 struct __ecereNameSpace__ecere__sys__BTNode;
55 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__BinaryTree;
57 struct __ecereNameSpace__ecere__sys__BinaryTree
59 struct __ecereNameSpace__ecere__sys__BTNode * root;
61 int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, uintptr_t a, uintptr_t b);
62 void (* FreeKey)(void * key);
63 } __attribute__ ((gcc_struct));
65 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__OldList;
67 struct __ecereNameSpace__ecere__sys__OldList
74 } __attribute__ ((gcc_struct));
76 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Class;
78 struct __ecereNameSpace__ecere__com__Class
80 struct __ecereNameSpace__ecere__com__Class * prev;
81 struct __ecereNameSpace__ecere__com__Class * next;
87 int (* Constructor)(struct __ecereNameSpace__ecere__com__Instance *);
88 void (* Destructor)(struct __ecereNameSpace__ecere__com__Instance *);
91 struct __ecereNameSpace__ecere__com__Class * base;
92 struct __ecereNameSpace__ecere__sys__BinaryTree methods;
93 struct __ecereNameSpace__ecere__sys__BinaryTree members;
94 struct __ecereNameSpace__ecere__sys__BinaryTree prop;
95 struct __ecereNameSpace__ecere__sys__OldList membersAndProperties;
96 struct __ecereNameSpace__ecere__sys__BinaryTree classProperties;
97 struct __ecereNameSpace__ecere__sys__OldList derivatives;
101 struct __ecereNameSpace__ecere__com__Instance * module;
102 struct __ecereNameSpace__ecere__com__NameSpace * nameSpace;
103 char * dataTypeString;
104 struct __ecereNameSpace__ecere__com__Instance * dataType;
106 int defaultAlignment;
107 void (* Initialize)();
109 struct __ecereNameSpace__ecere__sys__OldList selfWatchers;
110 char * designerClass;
111 unsigned int noExpansion;
112 char * defaultProperty;
113 unsigned int comRedefinition;
115 unsigned int isRemote;
116 unsigned int internalDecl;
118 unsigned int computeSize;
120 int destructionWatchOffset;
122 struct __ecereNameSpace__ecere__sys__OldList delayedCPValues;
123 int inheritanceAccess;
126 struct __ecereNameSpace__ecere__sys__OldList conversions;
127 struct __ecereNameSpace__ecere__sys__OldList templateParams;
128 struct __ecereNameSpace__ecere__com__ClassTemplateArgument * templateArgs;
129 struct __ecereNameSpace__ecere__com__Class * templateClass;
130 struct __ecereNameSpace__ecere__sys__OldList templatized;
132 unsigned int isInstanceClass;
133 unsigned int byValueSystemClass;
134 } __attribute__ ((gcc_struct));
136 extern long long __ecereNameSpace__ecere__com__eClass_GetProperty(struct __ecereNameSpace__ecere__com__Class * _class, char * name);
138 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Instance;
140 struct __ecereNameSpace__ecere__com__Instance
143 struct __ecereNameSpace__ecere__com__Class * _class;
145 } __attribute__ ((gcc_struct));
147 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Property;
149 struct __ecereNameSpace__ecere__com__Property
151 struct __ecereNameSpace__ecere__com__Property * prev;
152 struct __ecereNameSpace__ecere__com__Property * next;
154 unsigned int isProperty;
157 struct __ecereNameSpace__ecere__com__Class * _class;
158 char * dataTypeString;
159 struct __ecereNameSpace__ecere__com__Class * dataTypeClass;
160 struct __ecereNameSpace__ecere__com__Instance * dataType;
161 void (* Set)(void * , int);
162 int (* Get)(void * );
163 unsigned int (* IsSet)(void * );
167 unsigned int conversion;
168 unsigned int watcherOffset;
170 unsigned int compiled;
171 unsigned int selfWatchable;
172 unsigned int isWatchable;
173 } __attribute__ ((gcc_struct));
175 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__DataMember;
177 struct __ecereNameSpace__ecere__com__DataMember
179 struct __ecereNameSpace__ecere__com__DataMember * prev;
180 struct __ecereNameSpace__ecere__com__DataMember * next;
182 unsigned int isProperty;
185 struct __ecereNameSpace__ecere__com__Class * _class;
186 char * dataTypeString;
187 struct __ecereNameSpace__ecere__com__Class * dataTypeClass;
188 struct __ecereNameSpace__ecere__com__Instance * dataType;
192 struct __ecereNameSpace__ecere__sys__OldList members;
193 struct __ecereNameSpace__ecere__sys__BinaryTree membersAlpha;
196 } __attribute__ ((gcc_struct));
198 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Method;
200 struct __ecereNameSpace__ecere__com__Method
203 struct __ecereNameSpace__ecere__com__Method * parent;
204 struct __ecereNameSpace__ecere__com__Method * left;
205 struct __ecereNameSpace__ecere__com__Method * right;
210 struct __ecereNameSpace__ecere__com__Class * _class;
212 char * dataTypeString;
213 struct __ecereNameSpace__ecere__com__Instance * dataType;
215 } __attribute__ ((gcc_struct));
217 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__SerialBuffer;
219 struct __ecereNameSpace__ecere__com__SerialBuffer
221 unsigned char * _buffer;
225 } __attribute__ ((gcc_struct));
227 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__DataValue;
229 struct __ecereNameSpace__ecere__com__DataValue
244 } __attribute__ ((gcc_struct));
245 } __attribute__ ((gcc_struct));
247 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__ClassTemplateArgument;
249 struct __ecereNameSpace__ecere__com__ClassTemplateArgument
255 char * dataTypeString;
256 struct __ecereNameSpace__ecere__com__Class * dataTypeClass;
257 } __attribute__ ((gcc_struct));
258 struct __ecereNameSpace__ecere__com__DataValue expression;
264 struct __ecereNameSpace__ecere__com__DataMember * member;
265 struct __ecereNameSpace__ecere__com__Property * prop;
266 struct __ecereNameSpace__ecere__com__Method * method;
267 } __attribute__ ((gcc_struct));
268 } __attribute__ ((gcc_struct));
269 } __attribute__ ((gcc_struct));
270 } __attribute__ ((gcc_struct));
272 void exit(int status);
274 void * calloc(size_t nmemb, size_t size);
276 void free(void * ptr);
278 void * malloc(size_t size);
280 void * realloc(void * ptr, size_t size);
282 long int strtol(const char * nptr, char ** endptr, int base);
284 long long int strtoll(const char * nptr, char ** endptr, int base);
286 unsigned long long int strtoull(const char * nptr, char ** endptr, int base);
288 extern int runtimePlatform;
297 extern size_t strlen(const char * );
299 extern char * strcpy(char * , const char * );
301 char * __ecereNameSpace__ecere__sys__GetExtension(char * string, char * output)
305 int len = strlen(string);
306 int limit = (__simpleStruct0 = len - (17), (0 > __simpleStruct0) ? 0 : __simpleStruct0);
309 for(c = len; c >= limit; c--)
315 strcpy(output, string + c + 1);
318 else if(ch == '/' || ch == '\\')
324 extern int strcmp(const char * , const char * );
326 extern void * memmove(void * , const void * , size_t size);
328 extern int __ecereNameSpace__ecere__com__GetRuntimePlatform(void);
330 char * __ecereNameSpace__ecere__sys__StripLastDirectory(char * string, char * output)
334 if(runtimePlatform == 1 && !strcmp(string, "\\\\"))
341 int len = strlen(string);
343 for(c = len - 2; c >= 0; c--)
344 if(string[c] == '/' || string[c] == '\\')
346 else if(string[c] == '>' || (string[c] == ':' && c == 0))
351 if((runtimePlatform == 1) ? (c >= 0) : (c > 0))
353 memmove(output, string, c);
356 if(runtimePlatform == 1 && c == 1 && output[0] == '\\' && output[1] == '\\')
362 strcpy(output, ((__ecereNameSpace__ecere__com__GetRuntimePlatform() == 1) ? "\\" : "/"));
369 strcpy(output, ((__ecereNameSpace__ecere__com__GetRuntimePlatform() == 1) ? "\\" : "/"));
375 return (((void *)0));
381 char * __ecereNameSpace__ecere__sys__SplitDirectory(const char * string, char * part, char * rest)
387 for(; (ch = string[c]) && (ch == '/' || ch == '\\'); c++)
390 part[len++] = ((__ecereNameSpace__ecere__com__GetRuntimePlatform() == 1) ? '\\' : '/');
393 for(; (ch = string[c]) && (ch != '/' && ch != '\\'); c++)
399 for(; (ch = string[c]) && (ch == '/' || ch == '\\'); c++)
401 memmove(rest, string + c, strlen(string + c) + 1);
402 for(c = strlen(rest); c >= 0; c--)
403 if(ch != '/' && ch != '\\')
411 char * __ecereNameSpace__ecere__sys__GetLastDirectory(char * string, char * output)
414 int len = string ? strlen(string) : 0;
416 for(c = len - 2; c >= 0; c--)
417 if(string[c] == '/' || string[c] == '\\' || string[c] == ':' || string[c] == '>')
421 memmove(output, string + c, strlen(string + c) + 1);
424 len = strlen(output);
425 if(len > 1 && (output[len - 1] == '\\' || output[len - 1] == '/'))
426 output[len - 1] = '\0';
430 extern char * strncpy(char * , const char * , size_t n);
432 unsigned int __ecereNameSpace__ecere__sys__SplitArchivePath(char * fileName, char * archiveName, char ** archiveFile)
434 if(fileName[0] == '<')
436 int c = strlen(fileName);
438 for(; c > 0 && fileName[c] != '>'; c--)
442 strncpy(archiveName, fileName + 1, c - 1);
443 archiveName[c - 1] = '\0';
444 *archiveFile = fileName + c + 1;
448 else if(fileName[0] == ':')
450 strcpy(archiveName, ":");
451 *archiveFile = fileName + 1;
457 extern char * strstr(const char * , const char * );
459 extern void * memcpy(void * , const void * , size_t size);
461 extern int toupper(int);
463 extern char * strcat(char * , const char * );
465 extern int sprintf(char * , char * , ...);
467 char * __ecereNameSpace__ecere__sys__PathCatSlash(char * string, char * addedPath)
469 unsigned int modified = 0x0;
473 char fileName[797] = "", archiveName[797] = "", * file = (((void *)0));
475 unsigned int isURL = 0x0;
476 unsigned int isArchive = __ecereNameSpace__ecere__sys__SplitArchivePath(string, archiveName, &file);
478 char * protocolSymbol;
480 strcpy(fileName, isArchive ? file : string);
483 protocolSymbol = (fileName[0] && fileName[0] != '.' && fileName[0] != '/' && fileName[0] != '\\' && fileName[1] != ':') ? strstr(fileName, "://") : (((void *)0));
486 char * slash = strstr(protocolSymbol + 3, "/");
492 urlFileName = fileName + strlen(fileName);
495 protocolSymbol = (addedPath[0] && addedPath[0] != '.' && addedPath[0] != '/' && addedPath[0] != '\\' && addedPath[1] != ':') ? strstr(addedPath, "://") : (((void *)0));
498 int len = protocolSymbol - addedPath + 3;
500 memcpy(fileName, addedPath, len);
501 fileName[len] = (char)0;
505 else if(__ecereNameSpace__ecere__com__GetRuntimePlatform() == 1)
507 if(addedPath[0] && addedPath[1] == ':' && addedPath[0] != '<')
509 fileName[0] = (char)toupper(addedPath[0]);
515 else if(addedPath[0] == '\\' && addedPath[1] == '\\')
517 fileName[0] = fileName[1] = '\\';
523 if(!modified && isURL && (addedPath[0] == '\\' || addedPath[0] == '/'))
525 urlFileName[0] = '/';
526 urlFileName[1] = '\0';
528 else if(!modified && (addedPath[0] == '\\' || addedPath[0] == '/'))
530 if(__ecereNameSpace__ecere__com__GetRuntimePlatform() == 1)
532 if(addedPath[0] == '/' && !addedPath[1])
534 fileName[0] = addedPath[0];
538 else if(fileName[0] && fileName[1] == ':')
558 for(; addedPath[c]; )
560 char directory[4384LL];
565 for(; (ch = addedPath[c]) && (ch == '/' || ch == '\\'); c++)
567 for(; (ch = addedPath[c]) && (ch != '/' && ch != '\\'); c++)
569 if(isURL && ch == '?')
574 directory[len++] = ch;
576 directory[len] = '\0';
577 for(count = len - 1; count >= 0 && (directory[count] == ' ' || directory[count] == '\t'); count--)
579 directory[count] = '\0';
585 if(strstr(directory, "..") == directory && (!directory[2] || directory[2] == ((__ecereNameSpace__ecere__com__GetRuntimePlatform() == 1) ? '\\' : '/') || directory[2] == '/'))
587 int strLen = strlen(fileName) - 1;
591 for(; (ch = fileName[strLen]) && strLen > -1 && (ch == '/' || ch == '\\'); strLen--)
593 for(; (ch = fileName[strLen]) && strLen > -1 && (ch != '/' && ch != '\\' && ch != ':'); strLen--)
595 for(; (ch = fileName[strLen]) && strLen > -1 && (ch == '/' || ch == '\\'); strLen--)
601 strLen = (__simpleStruct0 = urlFileName - fileName, (strLen > __simpleStruct0) ? strLen : __simpleStruct0);
603 if(!strcmp(fileName + strLen + 1, ".."))
605 strcat(fileName, "/");
606 strcat(fileName, "..");
610 if(__ecereNameSpace__ecere__com__GetRuntimePlatform() == 1)
612 if(!strLen && fileName[0] == '\\' && fileName[1] == '\\')
615 return (((void *)0));
624 fileName[strLen + 1] = '\0';
628 fileName[strLen + 1] = '\0';
640 strcpy(fileName, "..");
643 else if(strcmp(directory, "."))
645 int strLen = strlen(fileName);
646 unsigned int notZeroLen = strLen > 0;
648 if(strLen > 0 && (fileName[strLen - 1] == '/' || fileName[strLen - 1] == '\\'))
651 fileName[strLen++] = '/';
652 fileName[strLen] = '\0';
653 if(strLen + strlen(directory) > (797) - 3)
654 return (((void *)0));
655 strcat(fileName, directory);
658 if(isURL && ch == '/')
659 strcat(fileName, "/");
660 if(isURL && ch == '?')
662 strcat(fileName, addedPath + c);
667 sprintf(string, "<%s>%s", archiveName, fileName);
669 strcpy(string, fileName);
671 return modified ? string : (((void *)0));
674 char * __ecereNameSpace__ecere__sys__PathCat(char * string, char * addedPath)
676 unsigned int modified = 0x0;
680 char fileName[797] = "", archiveName[797] = "", * file = (((void *)0));
682 unsigned int isURL = 0x0;
683 unsigned int isArchive = __ecereNameSpace__ecere__sys__SplitArchivePath(string, archiveName, &file);
685 char * protocolSymbol;
687 strcpy(fileName, isArchive ? file : string);
690 protocolSymbol = (fileName[0] && fileName[0] != '.' && fileName[0] != '/' && fileName[0] != '\\' && fileName[1] != ':') ? strstr(fileName, "://") : (((void *)0));
693 char * slash = strstr(protocolSymbol + 3, "/");
699 urlFileName = fileName + strlen(fileName);
702 protocolSymbol = (addedPath[0] && addedPath[0] != '.' && addedPath[0] != '/' && addedPath[0] != '\\' && addedPath[1] != ':') ? strstr(addedPath, "://") : (((void *)0));
705 int len = protocolSymbol - addedPath + 3;
707 memcpy(fileName, addedPath, len);
708 fileName[len] = (char)0;
712 else if(runtimePlatform == 1)
714 if(addedPath[0] && addedPath[1] == ':' && addedPath[0] != '<')
716 fileName[0] = (char)toupper(addedPath[0]);
722 else if(addedPath[0] == '\\' && addedPath[1] == '\\')
724 fileName[0] = fileName[1] = '\\';
729 else if(fileName[0] == '/' && !archiveName[0] && strcmp(addedPath, "/"))
730 return (((void *)0));
732 if(!modified && isURL && (addedPath[0] == '\\' || addedPath[0] == '/'))
734 urlFileName[0] = '/';
735 urlFileName[1] = '\0';
737 else if(!modified && (addedPath[0] == '\\' || addedPath[0] == '/'))
739 if(runtimePlatform == 1)
741 if(addedPath[0] == '/' && !addedPath[1])
743 fileName[0] = addedPath[0];
747 else if(fileName[0] && fileName[1] == ':')
767 for(; addedPath[c]; )
769 char directory[4384LL];
774 for(; (ch = addedPath[c]) && (ch == '/' || ch == '\\'); c++)
776 for(; (ch = addedPath[c]) && (ch != '/' && ch != '\\'); c++)
778 if(isURL && ch == '?')
783 directory[len++] = ch;
785 directory[len] = '\0';
786 for(count = len - 1; count >= 0 && (directory[count] == ' ' || directory[count] == '\t'); count--)
788 directory[count] = '\0';
794 if(strstr(directory, "..") == directory && (!directory[2] || directory[2] == ((__ecereNameSpace__ecere__com__GetRuntimePlatform() == 1) ? '\\' : '/')))
796 int strLen = strlen(fileName) - 1;
800 unsigned int separator = 0x0;
802 for(; (ch = fileName[strLen]) && strLen > -1 && (ch == '/' || ch == '\\'); strLen--)
804 for(; (ch = fileName[strLen]) && strLen > -1 && (ch != '/' && ch != '\\' && ch != ':'); strLen--)
806 for(; (ch = fileName[strLen]) && strLen > -1 && (ch == '/' || ch == '\\'); strLen--)
812 strLen = (__simpleStruct0 = urlFileName - fileName, (strLen > __simpleStruct0) ? strLen : __simpleStruct0);
814 if(!strcmp(fileName + strLen + (separator ? 2 : 1), ".."))
816 strcat(fileName, ((__ecereNameSpace__ecere__com__GetRuntimePlatform() == 1) ? "\\" : "/"));
817 strcat(fileName, "..");
821 if(runtimePlatform == 1)
823 if(!strLen && fileName[0] == '\\' && fileName[1] == '\\')
826 return (((void *)0));
835 fileName[strLen + 1] = '\0';
839 fileName[strLen + 1] = '\0';
851 strcpy(fileName, "..");
854 else if(strcmp(directory, "."))
856 int strLen = strlen(fileName);
857 unsigned int notZeroLen = strLen > 0;
859 if(strLen > 0 && (fileName[strLen - 1] == '/' || fileName[strLen - 1] == '\\'))
864 fileName[strLen++] = '/';
866 fileName[strLen++] = ((__ecereNameSpace__ecere__com__GetRuntimePlatform() == 1) ? '\\' : '/');
868 fileName[strLen] = '\0';
869 if(strLen + strlen(directory) > (797) - 3)
870 return (((void *)0));
871 strcat(fileName, directory);
874 if(isURL && ch == '/')
875 strcat(fileName, "/");
876 if(isURL && ch == '?')
878 strcat(fileName, addedPath + c);
883 sprintf(string, "<%s>%s", archiveName, fileName);
885 strcpy(string, fileName);
887 return modified ? string : (((void *)0));
890 extern int strcasecmp(const char * , const char * );
892 char * __ecereNameSpace__ecere__sys__MakePathRelative(char * path, char * to, char * destination)
897 memmove(destination, path, strlen(path) + 1);
900 char pathPart[4384LL], pathRest[797];
901 char toPart[4384LL], toRest[797];
902 unsigned int different = 0x0;
904 strcpy(pathRest, path);
906 destination[0] = '\0';
909 __ecereNameSpace__ecere__sys__SplitDirectory(toRest, toPart, toRest);
911 __ecereNameSpace__ecere__sys__SplitDirectory(pathRest, pathPart, pathRest);
912 if(different || ((__ecereNameSpace__ecere__com__GetRuntimePlatform() == 1) ? (strcasecmp) : strcmp)(toPart, pathPart))
915 strcat(destination, "..");
916 strcat(destination, ((__ecereNameSpace__ecere__com__GetRuntimePlatform() == 1) ? "\\" : "/"));
920 __ecereNameSpace__ecere__sys__PathCat(destination, pathPart);
923 __ecereNameSpace__ecere__sys__SplitDirectory(pathRest, pathPart, pathRest);
924 __ecereNameSpace__ecere__sys__PathCat(destination, pathPart);
927 len = strlen(destination);
928 if(len > 1 && (destination[len - 1] == '/' || destination[len - 1] == '\\'))
929 destination[--len] = '\0';
933 unsigned int __ecereNameSpace__ecere__sys__StripExtension(char * string)
937 for(c = strlen(string); c >= 0; c--)
943 else if(string[c] == '\\' || string[c] == '/')
948 char * __ecereNameSpace__ecere__sys__ChangeExtension(char * string, char * ext, char * output)
951 strcpy(output, string);
952 __ecereNameSpace__ecere__sys__StripExtension(output);
959 void __ecereNameSpace__ecere__sys__PrintSize(char * string, unsigned int size, int prec)
965 sprintf(format, "%%.0%df", prec);
966 if(size > 1024 * 1024 * 1024)
968 sprintf(string, format, (float)size / (float)((float)(float)(1024 * 1024 * 1024)));
969 strcat(string, " GB");
971 else if(size > 1024 * 1024)
973 sprintf(string, format, (float)size / (float)((float)(float)(1024 * 1024)));
974 strcat(string, " MB");
978 sprintf(string, format, (float)size / (float)1024);
979 strcat(string, " KB");
983 sprintf(string, "%d B", size);
986 void __ecereNameSpace__ecere__sys__PrintBigSize(char * string, double size, int prec)
988 if(size > (double)1024)
992 sprintf(format, "%%.0%df", prec);
993 if(size > 1024.0 * 1024.0 * 1024.0 * 1024.0)
995 sprintf(string, format, size / ((double)(double)(1024 * 1024) * 1024.0 * 1024.0));
996 strcat(string, " TB");
998 else if(size > 1024.0 * 1024.0 * 1024.0)
1000 sprintf(string, format, size / (1024.0 * 1024.0 * 1024.0));
1001 strcat(string, " GB");
1003 else if(size > 1024.0 * 1024.0)
1005 sprintf(string, format, size / (1024.0 * 1024.0));
1006 strcat(string, " MB");
1010 sprintf(string, format, size / 1024.0);
1011 strcat(string, " KB");
1015 sprintf(string, "%.0f B", size);
1018 extern int strncmp(const char * , const char * , size_t n);
1020 extern int strncasecmp(const char * , const char * , size_t n);
1022 extern int tolower(int);
1024 extern int isalnum(int c);
1026 char * __ecereNameSpace__ecere__sys__SearchString(char * buffer, int start, char * subStr, unsigned int matchCase, unsigned int matchWord)
1028 if(buffer && subStr)
1031 char * strBuffer = buffer + start;
1032 int subLen = strlen(subStr);
1033 char beforeChar = start ? *(strBuffer - 1) : (char)0;
1034 int (* strcompare)(const char *, const char *, unsigned int) = matchCase ? strncmp : (strncasecmp);
1036 for(ptr = strBuffer; *ptr; ptr++)
1038 if(matchCase ? (*subStr == *ptr) : (tolower(*subStr) == tolower(*ptr)))
1042 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)))))
1047 if(!strcompare(ptr, subStr, subLen))
1051 beforeChar = ptr[0];
1054 return (((void *)0));
1057 char * __ecereNameSpace__ecere__sys__RSearchString(char * buffer, char * subStr, int maxLen, unsigned int matchCase, unsigned int matchWord)
1059 if(buffer && subStr)
1061 int subLen = strlen(subStr);
1062 char * ptr1 = buffer + maxLen - subLen;
1063 char * ptr2 = buffer + maxLen - subLen - 1;
1064 int (* strcompare)(const char *, const char *, unsigned int) = matchCase ? strncmp : (strncasecmp);
1066 for(; ptr1 >= buffer; ptr1--, ptr2--)
1068 if(tolower(*subStr) == tolower(*ptr1))
1072 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)))))
1077 if(!strcompare(ptr1, subStr, subLen))
1083 return (((void *)0));
1086 static struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__BackSlashEscaping;
1088 extern char * strchr(const char * , int);
1090 int __ecereNameSpace__ecere__sys__Tokenize(char * string, int maxTokens, char * tokens[], unsigned int esc)
1093 const char * escChars = " !\"%&'()+,;=[]^`{}~";
1094 const char * escCharsQuoted = "\"";
1096 const char * escChars = " !\"$&'()*:;<=>?[\\`{|";
1097 const char * escCharsQuoted = "\"()$";
1100 unsigned int quoted = 0x0, escaped = 0x0;
1101 char * start = (((void *)0)), * output = string;
1104 for(; (ch = *string) && count < maxTokens; string++, output++)
1106 unsigned int wasEscaped = escaped;
1108 if(output != string)
1123 else if(ch == ' ' && !quoted)
1125 tokens[count++] = start;
1127 start = (((void *)0));
1140 if(!wasEscaped && ch == '\\' && (esc == 0x1 || (esc == 0x2 && strchr(quoted ? escCharsQuoted : escChars, *(string + 1)))))
1143 if(start && count < maxTokens)
1145 tokens[count++] = start;
1151 int __ecereNameSpace__ecere__sys__TokenizeWith(char * string, int maxTokens, char * tokens[], char * tokenizers, unsigned int escapeBackSlashes)
1154 unsigned int quoted = 0x0;
1155 unsigned char * start = (((void *)0));
1156 unsigned int escaped = 0x0;
1157 char * output = string;
1158 unsigned int quotedFromStart = 0x0;
1160 for(; *string && count < maxTokens; string++, output++)
1162 if(output != string)
1170 if(output != string)
1173 else if(escapeBackSlashes && *string == '\\')
1175 else if(*string == '\"')
1181 quotedFromStart = 0x0;
1187 else if(strchr(tokenizers, *string) && !quoted)
1189 tokens[count++] = start;
1191 start = (((void *)0));
1194 else if(!strchr(tokenizers, *string))
1198 quotedFromStart = 0x1;
1205 if(*string == '\\' && escapeBackSlashes)
1210 if(start && count < maxTokens)
1212 tokens[count++] = start;
1218 char * __ecereNameSpace__ecere__sys__TrimLSpaces(char * string, char * output)
1222 for(c = 0; string[c] && string[c] == ' '; c++)
1224 memmove(output, string + c, strlen(string + c) + 1);
1228 char * __ecereNameSpace__ecere__sys__TrimRSpaces(char * string, char * output)
1232 for(c = strlen(string) - 1; c >= 0 && string[c] == ' '; c--)
1236 memmove(output, string, c + 1);
1237 output[c + 1] = '\0';
1244 void __ecereNameSpace__ecere__sys__ChangeCh(char * string, char ch1, char ch2)
1248 for(c = 0; string[c]; c++)
1249 if(string[c] == ch1)
1253 void __ecereNameSpace__ecere__sys__RepeatCh(char * string, int count, char ch)
1257 for(c = 0; c < count; c++)
1259 string[c] = (char)0;
1262 char * __ecereNameSpace__ecere__sys__CopyString(char * string)
1266 int len = strlen(string);
1267 char * destination = __ecereNameSpace__ecere__com__eSystem_New(sizeof(char) * (len + 1));
1270 memcpy(destination, string, len + 1);
1274 return (((void *)0));
1277 unsigned int __ecereNameSpace__ecere__sys__GetString(char ** buffer, char * string, int max)
1281 unsigned int quoted = 0x0;
1282 unsigned int result = 0x1;
1286 string[0] = (char)0;
1291 if(!(ch = *((*buffer)++)))
1293 if((ch != '\n') && (ch != '\r') && (ch != ' ') && (ch != ',') && (ch != '\t'))
1300 for(c = 0; c < max - 1; c++)
1302 if(!quoted && ((ch == '\n') || (ch == '\r') || (ch == ' ') || (ch == ',') || (ch == '\t')))
1309 quoted ^= (unsigned int)1;
1314 if(!(ch = *(*buffer)))
1321 string[c] = (char)0;
1326 extern int atoi(const char * );
1328 int __ecereNameSpace__ecere__sys__GetValue(char ** buffer)
1332 __ecereNameSpace__ecere__sys__GetString(buffer, string, 20);
1333 return atoi(string);
1336 extern unsigned long strtoul(const char * nptr, char * * endptr, int base);
1338 unsigned int __ecereNameSpace__ecere__sys__GetHexValue(char ** buffer)
1342 __ecereNameSpace__ecere__sys__GetString(buffer, string, 20);
1343 return strtoul(string, (((void *)0)), 16);
1346 char * __ecereNameSpace__ecere__sys__StripQuotes(char * string, char * output)
1349 char * src = (string[0] == '\"') ? (string + 1) : string;
1351 memmove(output, src, strlen(src) + 1);
1352 len = strlen(output);
1353 if(len && output[len - 1] == '\"')
1354 output[len - 1] = '\0';
1358 extern unsigned int isdigit(int);
1360 double __ecereNameSpace__ecere__sys__FloatFromString(char * string)
1363 float dec = 0, res = 0;
1367 for(c = 0; string[c]; c++)
1378 else if((ch == '.') && !dec)
1380 else if(isdigit(ch))
1385 res += (float)dig / dec;
1389 res = res * (float)10 + (float)dig;
1394 return (float)neg * res;
1397 unsigned int __ecereNameSpace__ecere__sys__IsPathInsideOf(char * path, char * of)
1399 if(!path[0] || !of[0])
1403 char ofPart[274], ofRest[797];
1404 char pathPart[274], pathRest[797];
1407 strcpy(pathRest, path);
1408 for(; ofRest[0] && pathRest[0]; )
1410 __ecereNameSpace__ecere__sys__SplitDirectory(ofRest, ofPart, ofRest);
1411 __ecereNameSpace__ecere__sys__SplitDirectory(pathRest, pathPart, pathRest);
1412 if(((__ecereNameSpace__ecere__com__GetRuntimePlatform() == 1) ? (strcasecmp) : strcmp)(pathPart, ofPart))
1415 if(!ofRest[0] && !pathRest[0])
1417 else if(!pathRest[0])
1423 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__DefinedExpression;
1425 struct __ecereNameSpace__ecere__com__DefinedExpression;
1427 extern struct __ecereNameSpace__ecere__com__DefinedExpression * __ecereNameSpace__ecere__com__eSystem_RegisterDefine(char * name, char * value, struct __ecereNameSpace__ecere__com__Instance * module, int declMode);
1429 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__GlobalFunction;
1431 struct __ecereNameSpace__ecere__com__GlobalFunction;
1433 extern struct __ecereNameSpace__ecere__com__GlobalFunction * __ecereNameSpace__ecere__com__eSystem_RegisterFunction(char * name, char * type, void * func, struct __ecereNameSpace__ecere__com__Instance * module, int declMode);
1435 extern struct __ecereNameSpace__ecere__com__Class * __ecereNameSpace__ecere__com__eSystem_RegisterClass(int type, char * name, char * baseName, int size, int sizeClass, unsigned int (* Constructor)(void * ), void (* Destructor)(void * ), struct __ecereNameSpace__ecere__com__Instance * module, int declMode, int inheritanceAccess);
1437 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__NameSpace;
1439 struct __ecereNameSpace__ecere__com__NameSpace
1442 struct __ecereNameSpace__ecere__com__NameSpace * btParent;
1443 struct __ecereNameSpace__ecere__com__NameSpace * left;
1444 struct __ecereNameSpace__ecere__com__NameSpace * right;
1446 struct __ecereNameSpace__ecere__com__NameSpace * parent;
1447 struct __ecereNameSpace__ecere__sys__BinaryTree nameSpaces;
1448 struct __ecereNameSpace__ecere__sys__BinaryTree classes;
1449 struct __ecereNameSpace__ecere__sys__BinaryTree defines;
1450 struct __ecereNameSpace__ecere__sys__BinaryTree functions;
1451 } __attribute__ ((gcc_struct));
1453 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Module;
1455 struct __ecereNameSpace__ecere__com__Module
1457 struct __ecereNameSpace__ecere__com__Instance * application;
1458 struct __ecereNameSpace__ecere__sys__OldList classes;
1459 struct __ecereNameSpace__ecere__sys__OldList defines;
1460 struct __ecereNameSpace__ecere__sys__OldList functions;
1461 struct __ecereNameSpace__ecere__sys__OldList modules;
1462 struct __ecereNameSpace__ecere__com__Instance * prev;
1463 struct __ecereNameSpace__ecere__com__Instance * next;
1469 struct __ecereNameSpace__ecere__com__NameSpace privateNameSpace;
1470 struct __ecereNameSpace__ecere__com__NameSpace publicNameSpace;
1471 } __attribute__ ((gcc_struct));
1473 extern struct __ecereNameSpace__ecere__com__Instance * __thisModule;
1475 extern void __ecereNameSpace__ecere__com__eEnum_AddFixedValue(struct __ecereNameSpace__ecere__com__Class * _class, char * string, int value);
1477 void __ecereRegisterModule_String(struct __ecereNameSpace__ecere__com__Instance * module)
1479 struct __ecereNameSpace__ecere__com__Class * class;
1481 __ecereNameSpace__ecere__com__eSystem_RegisterDefine("ecere::sys::DIR_SEP", "(GetRuntimePlatform() == win32) ? '\\\\' : '/'", module, 4);
1482 __ecereNameSpace__ecere__com__eSystem_RegisterDefine("ecere::sys::DIR_SEPS", "(GetRuntimePlatform() == win32) ? \"\\\\\" : \"/\"", module, 4);
1483 __ecereNameSpace__ecere__com__eSystem_RegisterDefine("ecere::sys::MAX_F_STRING", "1025", module, 4);
1484 __ecereNameSpace__ecere__com__eSystem_RegisterDefine("ecere::sys::MAX_EXTENSION", "17", module, 4);
1485 __ecereNameSpace__ecere__com__eSystem_RegisterDefine("ecere::sys::MAX_FILENAME", "274", module, 4);
1486 __ecereNameSpace__ecere__com__eSystem_RegisterDefine("ecere::sys::MAX_DIRECTORY", "534", module, 4);
1487 __ecereNameSpace__ecere__com__eSystem_RegisterDefine("ecere::sys::MAX_LOCATION", "797", module, 4);
1488 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::GetExtension", "char * ecere::sys::GetExtension(char * string, char * output)", __ecereNameSpace__ecere__sys__GetExtension, module, 4);
1489 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::StripLastDirectory", "char * ecere::sys::StripLastDirectory(char * string, char * output)", __ecereNameSpace__ecere__sys__StripLastDirectory, module, 4);
1490 __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);
1491 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::GetLastDirectory", "char * ecere::sys::GetLastDirectory(char * string, char * output)", __ecereNameSpace__ecere__sys__GetLastDirectory, module, 4);
1492 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::SplitArchivePath", "bool ecere::sys::SplitArchivePath(char * fileName, char * archiveName, char * * archiveFile)", __ecereNameSpace__ecere__sys__SplitArchivePath, module, 4);
1493 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::PathCatSlash", "char * ecere::sys::PathCatSlash(char * string, char * addedPath)", __ecereNameSpace__ecere__sys__PathCatSlash, module, 4);
1494 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::PathCat", "char * ecere::sys::PathCat(char * string, char * addedPath)", __ecereNameSpace__ecere__sys__PathCat, module, 4);
1495 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::MakePathRelative", "char * ecere::sys::MakePathRelative(char * path, char * to, char * destination)", __ecereNameSpace__ecere__sys__MakePathRelative, module, 4);
1496 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::StripExtension", "bool ecere::sys::StripExtension(char * string)", __ecereNameSpace__ecere__sys__StripExtension, module, 4);
1497 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::ChangeExtension", "char * ecere::sys::ChangeExtension(char * string, char * ext, char * output)", __ecereNameSpace__ecere__sys__ChangeExtension, module, 4);
1498 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::PrintSize", "void ecere::sys::PrintSize(char * string, uint size, int prec)", __ecereNameSpace__ecere__sys__PrintSize, module, 4);
1499 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::PrintBigSize", "void ecere::sys::PrintBigSize(char * string, double size, int prec)", __ecereNameSpace__ecere__sys__PrintBigSize, module, 4);
1500 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::SearchString", "char * ecere::sys::SearchString(char * buffer, int start, char * subStr, bool matchCase, bool matchWord)", __ecereNameSpace__ecere__sys__SearchString, module, 4);
1501 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::RSearchString", "char * ecere::sys::RSearchString(char * buffer, char * subStr, int maxLen, bool matchCase, bool matchWord)", __ecereNameSpace__ecere__sys__RSearchString, module, 4);
1502 class = __ecereNameSpace__ecere__com__eSystem_RegisterClass(4, "ecere::sys::BackSlashEscaping", "bool", 0, 0, 0, 0, module, 4, 1);
1503 if(((struct __ecereNameSpace__ecere__com__Module *)(((char *)module + structSize_Instance)))->application == ((struct __ecereNameSpace__ecere__com__Module *)(((char *)__thisModule + structSize_Instance)))->application && class)
1504 __ecereClass___ecereNameSpace__ecere__sys__BackSlashEscaping = class;
1505 __ecereNameSpace__ecere__com__eEnum_AddFixedValue(class, "forArgsPassing", 2);
1506 __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);
1507 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::TokenizeWith", "int ecere::sys::TokenizeWith(char * string, int maxTokens, char * tokens[], char * tokenizers, bool escapeBackSlashes)", __ecereNameSpace__ecere__sys__TokenizeWith, module, 4);
1508 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::TrimLSpaces", "char * ecere::sys::TrimLSpaces(char * string, char * output)", __ecereNameSpace__ecere__sys__TrimLSpaces, module, 4);
1509 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::TrimRSpaces", "char * ecere::sys::TrimRSpaces(char * string, char * output)", __ecereNameSpace__ecere__sys__TrimRSpaces, module, 4);
1510 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::ChangeCh", "void ecere::sys::ChangeCh(char * string, char ch1, char ch2)", __ecereNameSpace__ecere__sys__ChangeCh, module, 4);
1511 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::RepeatCh", "void ecere::sys::RepeatCh(char * string, int count, char ch)", __ecereNameSpace__ecere__sys__RepeatCh, module, 4);
1512 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::CopyString", "char * ecere::sys::CopyString(char * string)", __ecereNameSpace__ecere__sys__CopyString, module, 4);
1513 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::GetString", "bool ecere::sys::GetString(char * * buffer, char * string, int max)", __ecereNameSpace__ecere__sys__GetString, module, 4);
1514 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::GetValue", "int ecere::sys::GetValue(char * * buffer)", __ecereNameSpace__ecere__sys__GetValue, module, 4);
1515 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::GetHexValue", "uint ecere::sys::GetHexValue(char * * buffer)", __ecereNameSpace__ecere__sys__GetHexValue, module, 4);
1516 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::StripQuotes", "char * ecere::sys::StripQuotes(char * string, char * output)", __ecereNameSpace__ecere__sys__StripQuotes, module, 4);
1517 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::FloatFromString", "double ecere::sys::FloatFromString(char * string)", __ecereNameSpace__ecere__sys__FloatFromString, module, 4);
1518 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::IsPathInsideOf", "bool ecere::sys::IsPathInsideOf(char * path, char * of)", __ecereNameSpace__ecere__sys__IsPathInsideOf, module, 4);
1521 void __ecereUnregisterModule_String(struct __ecereNameSpace__ecere__com__Instance * module)