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>
33 extern void * __ecereNameSpace__ecere__com__eSystem_New(unsigned int size);
35 extern void * __ecereNameSpace__ecere__com__eSystem_New0(unsigned int size);
37 extern void * __ecereNameSpace__ecere__com__eSystem_Renew(void * memory, unsigned int size);
39 extern void * __ecereNameSpace__ecere__com__eSystem_Renew0(void * memory, unsigned int size);
41 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__BTNode;
43 struct __ecereNameSpace__ecere__sys__BTNode;
45 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__BinaryTree;
47 struct __ecereNameSpace__ecere__sys__BinaryTree
49 struct __ecereNameSpace__ecere__sys__BTNode * root;
51 int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, uintptr_t a, uintptr_t b);
52 void (* FreeKey)(void * key);
53 } __attribute__ ((gcc_struct));
55 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__OldList;
57 struct __ecereNameSpace__ecere__sys__OldList
64 } __attribute__ ((gcc_struct));
66 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Class;
68 struct __ecereNameSpace__ecere__com__Class
70 struct __ecereNameSpace__ecere__com__Class * prev;
71 struct __ecereNameSpace__ecere__com__Class * next;
77 int (* Constructor)(struct __ecereNameSpace__ecere__com__Instance *);
78 void (* Destructor)(struct __ecereNameSpace__ecere__com__Instance *);
81 struct __ecereNameSpace__ecere__com__Class * base;
82 struct __ecereNameSpace__ecere__sys__BinaryTree methods;
83 struct __ecereNameSpace__ecere__sys__BinaryTree members;
84 struct __ecereNameSpace__ecere__sys__BinaryTree prop;
85 struct __ecereNameSpace__ecere__sys__OldList membersAndProperties;
86 struct __ecereNameSpace__ecere__sys__BinaryTree classProperties;
87 struct __ecereNameSpace__ecere__sys__OldList derivatives;
91 struct __ecereNameSpace__ecere__com__Instance * module;
92 struct __ecereNameSpace__ecere__com__NameSpace * nameSpace;
93 char * dataTypeString;
94 struct __ecereNameSpace__ecere__com__Instance * dataType;
97 void (* Initialize)();
99 struct __ecereNameSpace__ecere__sys__OldList selfWatchers;
100 char * designerClass;
101 unsigned int noExpansion;
102 char * defaultProperty;
103 unsigned int comRedefinition;
105 unsigned int isRemote;
106 unsigned int internalDecl;
108 unsigned int computeSize;
110 int destructionWatchOffset;
112 struct __ecereNameSpace__ecere__sys__OldList delayedCPValues;
113 int inheritanceAccess;
116 struct __ecereNameSpace__ecere__sys__OldList conversions;
117 struct __ecereNameSpace__ecere__sys__OldList templateParams;
118 struct __ecereNameSpace__ecere__com__ClassTemplateArgument * templateArgs;
119 struct __ecereNameSpace__ecere__com__Class * templateClass;
120 struct __ecereNameSpace__ecere__sys__OldList templatized;
122 unsigned int isInstanceClass;
123 } __attribute__ ((gcc_struct));
125 extern long long __ecereNameSpace__ecere__com__eClass_GetProperty(struct __ecereNameSpace__ecere__com__Class * _class, char * name);
127 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Instance;
129 struct __ecereNameSpace__ecere__com__Instance
132 struct __ecereNameSpace__ecere__com__Class * _class;
134 } __attribute__ ((gcc_struct));
136 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Property;
138 struct __ecereNameSpace__ecere__com__Property
140 struct __ecereNameSpace__ecere__com__Property * prev;
141 struct __ecereNameSpace__ecere__com__Property * next;
143 unsigned int isProperty;
146 struct __ecereNameSpace__ecere__com__Class * _class;
147 char * dataTypeString;
148 struct __ecereNameSpace__ecere__com__Class * dataTypeClass;
149 struct __ecereNameSpace__ecere__com__Instance * dataType;
150 void (* Set)(void * , int);
151 int (* Get)(void * );
152 unsigned int (* IsSet)(void * );
156 unsigned int conversion;
157 unsigned int watcherOffset;
159 unsigned int compiled;
160 unsigned int selfWatchable;
161 unsigned int isWatchable;
162 } __attribute__ ((gcc_struct));
164 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__DataMember;
166 struct __ecereNameSpace__ecere__com__DataMember
168 struct __ecereNameSpace__ecere__com__DataMember * prev;
169 struct __ecereNameSpace__ecere__com__DataMember * next;
171 unsigned int isProperty;
174 struct __ecereNameSpace__ecere__com__Class * _class;
175 char * dataTypeString;
176 struct __ecereNameSpace__ecere__com__Class * dataTypeClass;
177 struct __ecereNameSpace__ecere__com__Instance * dataType;
181 struct __ecereNameSpace__ecere__sys__OldList members;
182 struct __ecereNameSpace__ecere__sys__BinaryTree membersAlpha;
185 } __attribute__ ((gcc_struct));
187 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Method;
189 struct __ecereNameSpace__ecere__com__Method
192 struct __ecereNameSpace__ecere__com__Method * parent;
193 struct __ecereNameSpace__ecere__com__Method * left;
194 struct __ecereNameSpace__ecere__com__Method * right;
199 struct __ecereNameSpace__ecere__com__Class * _class;
201 char * dataTypeString;
202 struct __ecereNameSpace__ecere__com__Instance * dataType;
204 } __attribute__ ((gcc_struct));
206 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__SerialBuffer;
208 struct __ecereNameSpace__ecere__com__SerialBuffer
210 unsigned char * _buffer;
214 } __attribute__ ((gcc_struct));
216 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__DataValue;
218 struct __ecereNameSpace__ecere__com__DataValue
233 } __attribute__ ((gcc_struct));
234 } __attribute__ ((gcc_struct));
236 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__ClassTemplateArgument;
238 struct __ecereNameSpace__ecere__com__ClassTemplateArgument
244 char * dataTypeString;
245 struct __ecereNameSpace__ecere__com__Class * dataTypeClass;
246 } __attribute__ ((gcc_struct));
247 struct __ecereNameSpace__ecere__com__DataValue expression;
253 struct __ecereNameSpace__ecere__com__DataMember * member;
254 struct __ecereNameSpace__ecere__com__Property * prop;
255 struct __ecereNameSpace__ecere__com__Method * method;
256 } __attribute__ ((gcc_struct));
257 } __attribute__ ((gcc_struct));
258 } __attribute__ ((gcc_struct));
259 } __attribute__ ((gcc_struct));
261 void exit(int status);
263 void * calloc(size_t nmemb, size_t size);
265 void free(void * ptr);
267 void * malloc(size_t size);
269 void * realloc(void * ptr, size_t size);
271 long int strtol(const char * nptr, char ** endptr, int base);
273 long long int strtoll(const char * nptr, char ** endptr, int base);
275 unsigned long long int strtoull(const char * nptr, char ** endptr, int base);
277 extern int runtimePlatform;
286 extern size_t strlen(const char * );
288 extern char * strcpy(char * , const char * );
290 char * __ecereNameSpace__ecere__sys__GetExtension(char * string, char * output)
294 int len = strlen(string);
295 int limit = (__simpleStruct0 = len - (17), (0 > __simpleStruct0) ? 0 : __simpleStruct0);
298 for(c = len; c >= limit; c--)
304 strcpy(output, string + c + 1);
307 else if(ch == '/' || ch == '\\')
313 extern int strcmp(const char * , const char * );
315 extern void * memmove(void * , const void * , size_t size);
317 extern int __ecereNameSpace__ecere__com__GetRuntimePlatform(void);
319 char * __ecereNameSpace__ecere__sys__StripLastDirectory(char * string, char * output)
323 if(runtimePlatform == 1 && !strcmp(string, "\\\\"))
330 int len = strlen(string);
332 for(c = len - 2; c >= 0; c--)
333 if(string[c] == '/' || string[c] == '\\')
335 else if(string[c] == '>' || (string[c] == ':' && c == 0))
340 if((runtimePlatform == 1) ? (c >= 0) : (c > 0))
342 memmove(output, string, c);
345 if(runtimePlatform == 1 && c == 1 && output[0] == '\\' && output[1] == '\\')
351 strcpy(output, ((__ecereNameSpace__ecere__com__GetRuntimePlatform() == 1) ? "\\" : "/"));
358 strcpy(output, ((__ecereNameSpace__ecere__com__GetRuntimePlatform() == 1) ? "\\" : "/"));
364 return (((void *)0));
370 char * __ecereNameSpace__ecere__sys__SplitDirectory(const char * string, char * part, char * rest)
376 for(; (ch = string[c]) && (ch == '/' || ch == '\\'); c++)
379 part[len++] = ((__ecereNameSpace__ecere__com__GetRuntimePlatform() == 1) ? '\\' : '/');
382 for(; (ch = string[c]) && (ch != '/' && ch != '\\'); c++)
388 for(; (ch = string[c]) && (ch == '/' || ch == '\\'); c++)
390 memmove(rest, string + c, strlen(string + c) + 1);
391 for(c = strlen(rest); c >= 0; c--)
392 if(ch != '/' && ch != '\\')
400 char * __ecereNameSpace__ecere__sys__GetLastDirectory(char * string, char * output)
403 int len = string ? strlen(string) : 0;
405 for(c = len - 2; c >= 0; c--)
406 if(string[c] == '/' || string[c] == '\\' || string[c] == ':' || string[c] == '>')
410 memmove(output, string + c, strlen(string + c) + 1);
413 len = strlen(output);
414 if(len > 1 && (output[len - 1] == '\\' || output[len - 1] == '/'))
415 output[len - 1] = '\0';
419 extern char * strncpy(char * , const char * , size_t n);
421 unsigned int __ecereNameSpace__ecere__sys__SplitArchivePath(char * fileName, char * archiveName, char ** archiveFile)
423 if(fileName[0] == '<')
425 int c = strlen(fileName);
427 for(; c > 0 && fileName[c] != '>'; c--)
431 strncpy(archiveName, fileName + 1, c - 1);
432 archiveName[c - 1] = '\0';
433 *archiveFile = fileName + c + 1;
437 else if(fileName[0] == ':')
439 strcpy(archiveName, ":");
440 *archiveFile = fileName + 1;
446 extern char * strstr(const char * , const char * );
448 extern int toupper(int);
450 extern char * strcat(char * , const char * );
452 extern int sprintf(char * , char * , ...);
454 char * __ecereNameSpace__ecere__sys__PathCatSlash(char * string, char * addedPath)
456 unsigned int modified = 0x0;
460 char fileName[797] = "", archiveName[797] = "", * file;
462 unsigned int isURL = 0x0;
465 if(__ecereNameSpace__ecere__sys__SplitArchivePath(string, archiveName, &file))
466 strcpy(fileName, file);
469 strcpy(fileName, string);
471 if(strstr(string, "http://") == string)
473 char * slash = strstr(fileName + 7, "/");
479 urlFileName = fileName + strlen(fileName);
481 if(strstr(addedPath, "http://") == addedPath)
483 strcpy(fileName, "http://");
487 else if(__ecereNameSpace__ecere__com__GetRuntimePlatform() == 1)
489 if(addedPath[0] && addedPath[1] == ':' && addedPath[0] != '<')
491 fileName[0] = (char)toupper(addedPath[0]);
497 else if(addedPath[0] == '\\' && addedPath[1] == '\\')
499 fileName[0] = fileName[1] = '\\';
505 if(!modified && isURL && (addedPath[0] == '\\' || addedPath[0] == '/'))
507 urlFileName[0] = '/';
508 urlFileName[1] = '\0';
510 else if(!modified && (addedPath[0] == '\\' || addedPath[0] == '/'))
512 if(__ecereNameSpace__ecere__com__GetRuntimePlatform() == 1)
514 if(addedPath[0] == '/' && !addedPath[1])
516 fileName[0] = addedPath[0];
520 else if(fileName[0] && fileName[1] == ':')
540 for(; addedPath[c]; )
542 char directory[4384LL];
547 for(; (ch = addedPath[c]) && (ch == '/' || ch == '\\'); c++)
549 for(; (ch = addedPath[c]) && (ch != '/' && ch != '\\'); c++)
551 if(isURL && ch == '?')
556 directory[len++] = ch;
558 directory[len] = '\0';
559 for(count = len - 1; count >= 0 && (directory[count] == ' ' || directory[count] == '\t'); count--)
561 directory[count] = '\0';
567 if(strstr(directory, "..") == directory && (!directory[2] || directory[2] == ((__ecereNameSpace__ecere__com__GetRuntimePlatform() == 1) ? '\\' : '/') || directory[2] == '/'))
569 int strLen = strlen(fileName) - 1;
573 for(; (ch = fileName[strLen]) && strLen > -1 && (ch == '/' || ch == '\\'); strLen--)
575 for(; (ch = fileName[strLen]) && strLen > -1 && (ch != '/' && ch != '\\' && ch != ':'); strLen--)
577 for(; (ch = fileName[strLen]) && strLen > -1 && (ch == '/' || ch == '\\'); strLen--)
583 strLen = (__simpleStruct0 = urlFileName - fileName, (strLen > __simpleStruct0) ? strLen : __simpleStruct0);
585 if(!strcmp(fileName + strLen + 1, ".."))
587 strcat(fileName, "/");
588 strcat(fileName, "..");
592 if(__ecereNameSpace__ecere__com__GetRuntimePlatform() == 1)
594 if(!strLen && fileName[0] == '\\' && fileName[1] == '\\')
597 return (((void *)0));
606 fileName[strLen + 1] = '\0';
610 fileName[strLen + 1] = '\0';
622 strcpy(fileName, "..");
625 else if(strcmp(directory, "."))
627 int strLen = strlen(fileName);
628 unsigned int notZeroLen = strLen > 0;
630 if(strLen > 0 && (fileName[strLen - 1] == '/' || fileName[strLen - 1] == '\\'))
633 fileName[strLen++] = '/';
634 fileName[strLen] = '\0';
635 if(strLen + strlen(directory) > (797) - 3)
636 return (((void *)0));
637 strcat(fileName, directory);
640 if(isURL && ch == '/')
641 strcat(fileName, "/");
642 if(isURL && ch == '?')
644 strcat(fileName, addedPath + c);
649 sprintf(string, "<%s>%s", archiveName, fileName);
651 strcpy(string, fileName);
653 return modified ? string : (((void *)0));
656 char * __ecereNameSpace__ecere__sys__PathCat(char * string, char * addedPath)
658 unsigned int modified = 0x0;
662 char fileName[797] = "", archiveName[797] = "", * file;
664 unsigned int isURL = 0x0;
667 if(__ecereNameSpace__ecere__sys__SplitArchivePath(string, archiveName, &file))
668 strcpy(fileName, file);
671 strcpy(fileName, string);
673 if(strstr(string, "http://") == string)
675 char * slash = strstr(fileName + 7, "/");
681 urlFileName = fileName + strlen(fileName);
683 if(strstr(addedPath, "http://") == addedPath)
685 strcpy(fileName, "http://");
689 else if(runtimePlatform == 1)
691 if(addedPath[0] && addedPath[1] == ':' && addedPath[0] != '<')
693 fileName[0] = (char)toupper(addedPath[0]);
699 else if(addedPath[0] == '\\' && addedPath[1] == '\\')
701 fileName[0] = fileName[1] = '\\';
706 else if(fileName[0] == '/' && !archiveName[0] && strcmp(addedPath, "/"))
707 return (((void *)0));
709 if(!modified && isURL && (addedPath[0] == '\\' || addedPath[0] == '/'))
711 urlFileName[0] = '/';
712 urlFileName[1] = '\0';
714 else if(!modified && (addedPath[0] == '\\' || addedPath[0] == '/'))
716 if(runtimePlatform == 1)
718 if(addedPath[0] == '/' && !addedPath[1])
720 fileName[0] = addedPath[0];
724 else if(fileName[0] && fileName[1] == ':')
744 for(; addedPath[c]; )
746 char directory[4384LL];
751 for(; (ch = addedPath[c]) && (ch == '/' || ch == '\\'); c++)
753 for(; (ch = addedPath[c]) && (ch != '/' && ch != '\\'); c++)
755 if(isURL && ch == '?')
760 directory[len++] = ch;
762 directory[len] = '\0';
763 for(count = len - 1; count >= 0 && (directory[count] == ' ' || directory[count] == '\t'); count--)
765 directory[count] = '\0';
771 if(strstr(directory, "..") == directory && (!directory[2] || directory[2] == ((__ecereNameSpace__ecere__com__GetRuntimePlatform() == 1) ? '\\' : '/')))
773 int strLen = strlen(fileName) - 1;
777 unsigned int separator = 0x0;
779 for(; (ch = fileName[strLen]) && strLen > -1 && (ch == '/' || ch == '\\'); strLen--)
781 for(; (ch = fileName[strLen]) && strLen > -1 && (ch != '/' && ch != '\\' && ch != ':'); strLen--)
783 for(; (ch = fileName[strLen]) && strLen > -1 && (ch == '/' || ch == '\\'); strLen--)
789 strLen = (__simpleStruct0 = urlFileName - fileName, (strLen > __simpleStruct0) ? strLen : __simpleStruct0);
791 if(!strcmp(fileName + strLen + (separator ? 2 : 1), ".."))
793 strcat(fileName, ((__ecereNameSpace__ecere__com__GetRuntimePlatform() == 1) ? "\\" : "/"));
794 strcat(fileName, "..");
798 if(runtimePlatform == 1)
800 if(!strLen && fileName[0] == '\\' && fileName[1] == '\\')
803 return (((void *)0));
812 fileName[strLen + 1] = '\0';
816 fileName[strLen + 1] = '\0';
828 strcpy(fileName, "..");
831 else if(strcmp(directory, "."))
833 int strLen = strlen(fileName);
834 unsigned int notZeroLen = strLen > 0;
836 if(strLen > 0 && (fileName[strLen - 1] == '/' || fileName[strLen - 1] == '\\'))
841 fileName[strLen++] = '/';
843 fileName[strLen++] = ((__ecereNameSpace__ecere__com__GetRuntimePlatform() == 1) ? '\\' : '/');
845 fileName[strLen] = '\0';
846 if(strLen + strlen(directory) > (797) - 3)
847 return (((void *)0));
848 strcat(fileName, directory);
851 if(isURL && ch == '/')
852 strcat(fileName, "/");
853 if(isURL && ch == '?')
855 strcat(fileName, addedPath + c);
860 sprintf(string, "<%s>%s", archiveName, fileName);
862 strcpy(string, fileName);
864 return modified ? string : (((void *)0));
867 extern int strcasecmp(const char * , const char * );
869 char * __ecereNameSpace__ecere__sys__MakePathRelative(char * path, char * to, char * destination)
874 memmove(destination, path, strlen(path) + 1);
877 char pathPart[4384LL], pathRest[797];
878 char toPart[4384LL], toRest[797];
879 unsigned int different = 0x0;
881 strcpy(pathRest, path);
883 destination[0] = '\0';
886 __ecereNameSpace__ecere__sys__SplitDirectory(toRest, toPart, toRest);
888 __ecereNameSpace__ecere__sys__SplitDirectory(pathRest, pathPart, pathRest);
889 if(different || ((__ecereNameSpace__ecere__com__GetRuntimePlatform() == 1) ? (strcasecmp) : strcmp)(toPart, pathPart))
892 strcat(destination, "..");
893 strcat(destination, ((__ecereNameSpace__ecere__com__GetRuntimePlatform() == 1) ? "\\" : "/"));
897 __ecereNameSpace__ecere__sys__PathCat(destination, pathPart);
900 __ecereNameSpace__ecere__sys__SplitDirectory(pathRest, pathPart, pathRest);
901 __ecereNameSpace__ecere__sys__PathCat(destination, pathPart);
904 len = strlen(destination);
905 if(len > 1 && (destination[len - 1] == '/' || destination[len - 1] == '\\'))
906 destination[--len] = '\0';
910 unsigned int __ecereNameSpace__ecere__sys__StripExtension(char * string)
914 for(c = strlen(string); c >= 0; c--)
920 else if(string[c] == '\\' || string[c] == '/')
925 char * __ecereNameSpace__ecere__sys__ChangeExtension(char * string, char * ext, char * output)
928 strcpy(output, string);
929 __ecereNameSpace__ecere__sys__StripExtension(output);
936 void __ecereNameSpace__ecere__sys__PrintSize(char * string, unsigned int size, int prec)
942 sprintf(format, "%%.0%df", prec);
943 if(size > 1024 * 1024 * 1024)
945 sprintf(string, format, (float)size / (float)((float)(float)(1024 * 1024 * 1024)));
946 strcat(string, " GB");
948 else if(size > 1024 * 1024)
950 sprintf(string, format, (float)size / (float)((float)(float)(1024 * 1024)));
951 strcat(string, " MB");
955 sprintf(string, format, (float)size / (float)1024);
956 strcat(string, " KB");
960 sprintf(string, "%d B", size);
963 void __ecereNameSpace__ecere__sys__PrintBigSize(char * string, double size, int prec)
965 if(size > (double)1024)
969 sprintf(format, "%%.0%df", prec);
970 if(size > 1024.0 * 1024.0 * 1024.0 * 1024.0)
972 sprintf(string, format, size / ((double)(double)(1024 * 1024) * 1024.0 * 1024.0));
973 strcat(string, " TB");
975 else if(size > 1024.0 * 1024.0 * 1024.0)
977 sprintf(string, format, size / (1024.0 * 1024.0 * 1024.0));
978 strcat(string, " GB");
980 else if(size > 1024.0 * 1024.0)
982 sprintf(string, format, size / (1024.0 * 1024.0));
983 strcat(string, " MB");
987 sprintf(string, format, size / 1024.0);
988 strcat(string, " KB");
992 sprintf(string, "%.0f B", size);
995 extern int strncmp(const char * , const char * , size_t n);
997 extern int strncasecmp(const char * , const char * , size_t n);
999 extern int tolower(int);
1001 extern int isalnum(int c);
1003 char * __ecereNameSpace__ecere__sys__SearchString(char * buffer, int start, char * subStr, unsigned int matchCase, unsigned int matchWord)
1005 if(buffer && subStr)
1008 char * strBuffer = buffer + start;
1009 int subLen = strlen(subStr);
1010 char beforeChar = start ? *(strBuffer - 1) : (char)0;
1011 int (* strcompare)(const char *, const char *, unsigned int) = matchCase ? strncmp : (strncasecmp);
1013 for(ptr = strBuffer; *ptr; ptr++)
1015 if(matchCase ? (*subStr == *ptr) : (tolower(*subStr) == tolower(*ptr)))
1019 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)))))
1024 if(!strcompare(ptr, subStr, subLen))
1028 beforeChar = ptr[0];
1031 return (((void *)0));
1034 char * __ecereNameSpace__ecere__sys__RSearchString(char * buffer, char * subStr, int maxLen, unsigned int matchCase, unsigned int matchWord)
1036 if(buffer && subStr)
1038 int subLen = strlen(subStr);
1039 char * ptr1 = buffer + maxLen - subLen;
1040 char * ptr2 = buffer + maxLen - subLen - 1;
1041 int (* strcompare)(const char *, const char *, unsigned int) = matchCase ? strncmp : (strncasecmp);
1043 for(; ptr1 >= buffer; ptr1--, ptr2--)
1045 if(tolower(*subStr) == tolower(*ptr1))
1049 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)))))
1054 if(!strcompare(ptr1, subStr, subLen))
1060 return (((void *)0));
1063 static struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__BackSlashEscaping;
1065 extern char * strchr(const char * , int);
1067 int __ecereNameSpace__ecere__sys__Tokenize(char * string, int maxTokens, char * tokens[], unsigned int esc)
1070 const char * escChars = " !\"%&'()+,;=[]^`{}~";
1071 const char * escCharsQuoted = "\"";
1073 const char * escChars = " !\"$&'()*:;<=>?[\\`{|";
1074 const char * escCharsQuoted = "\"()$";
1077 unsigned int quoted = 0x0, escaped = 0x0;
1078 char * start = (((void *)0)), * output = string;
1081 for(; (ch = *string) && count < maxTokens; string++, output++)
1083 unsigned int wasEscaped = escaped;
1085 if(output != string)
1100 else if(ch == ' ' && !quoted)
1102 tokens[count++] = start;
1104 start = (((void *)0));
1117 if(!wasEscaped && ch == '\\' && (esc == 0x1 || (esc == 0x2 && strchr(quoted ? escCharsQuoted : escChars, *(string + 1)))))
1120 if(start && count < maxTokens)
1122 tokens[count++] = start;
1128 int __ecereNameSpace__ecere__sys__TokenizeWith(char * string, int maxTokens, char * tokens[], char * tokenizers, unsigned int escapeBackSlashes)
1131 unsigned int quoted = 0x0;
1132 unsigned char * start = (((void *)0));
1133 unsigned int escaped = 0x0;
1134 char * output = string;
1135 unsigned int quotedFromStart = 0x0;
1137 for(; *string && count < maxTokens; string++, output++)
1139 if(output != string)
1147 if(output != string)
1150 else if(escapeBackSlashes && *string == '\\')
1152 else if(*string == '\"')
1158 quotedFromStart = 0x0;
1164 else if(strchr(tokenizers, *string) && !quoted)
1166 tokens[count++] = start;
1168 start = (((void *)0));
1171 else if(!strchr(tokenizers, *string))
1175 quotedFromStart = 0x1;
1182 if(*string == '\\' && escapeBackSlashes)
1187 if(start && count < maxTokens)
1189 tokens[count++] = start;
1195 char * __ecereNameSpace__ecere__sys__TrimLSpaces(char * string, char * output)
1199 for(c = 0; string[c] && string[c] == ' '; c++)
1201 memmove(output, string + c, strlen(string + c) + 1);
1205 char * __ecereNameSpace__ecere__sys__TrimRSpaces(char * string, char * output)
1209 for(c = strlen(string) - 1; c >= 0 && string[c] == ' '; c--)
1213 memmove(output, string, c + 1);
1214 output[c + 1] = '\0';
1221 void __ecereNameSpace__ecere__sys__ChangeCh(char * string, char ch1, char ch2)
1225 for(c = 0; string[c]; c++)
1226 if(string[c] == ch1)
1230 void __ecereNameSpace__ecere__sys__RepeatCh(char * string, int count, char ch)
1234 for(c = 0; c < count; c++)
1236 string[c] = (char)0;
1239 extern void * memcpy(void * , const void * , size_t size);
1241 char * __ecereNameSpace__ecere__sys__CopyString(char * string)
1245 int len = strlen(string);
1246 char * destination = __ecereNameSpace__ecere__com__eSystem_New(sizeof(char) * (len + 1));
1249 memcpy(destination, string, len + 1);
1253 return (((void *)0));
1256 unsigned int __ecereNameSpace__ecere__sys__GetString(char ** buffer, char * string, int max)
1260 unsigned int quoted = 0x0;
1261 unsigned int result = 0x1;
1265 string[0] = (char)0;
1270 if(!(ch = *((*buffer)++)))
1272 if((ch != '\n') && (ch != '\r') && (ch != ' ') && (ch != ',') && (ch != '\t'))
1279 for(c = 0; c < max - 1; c++)
1281 if(!quoted && ((ch == '\n') || (ch == '\r') || (ch == ' ') || (ch == ',') || (ch == '\t')))
1288 quoted ^= (unsigned int)1;
1293 if(!(ch = *(*buffer)))
1300 string[c] = (char)0;
1305 extern int atoi(const char * );
1307 int __ecereNameSpace__ecere__sys__GetValue(char ** buffer)
1311 __ecereNameSpace__ecere__sys__GetString(buffer, string, 20);
1312 return atoi(string);
1315 extern unsigned long strtoul(const char * nptr, char * * endptr, int base);
1317 unsigned int __ecereNameSpace__ecere__sys__GetHexValue(char ** buffer)
1321 __ecereNameSpace__ecere__sys__GetString(buffer, string, 20);
1322 return strtoul(string, (((void *)0)), 16);
1325 char * __ecereNameSpace__ecere__sys__StripQuotes(char * string, char * output)
1328 char * src = (string[0] == '\"') ? (string + 1) : string;
1330 memmove(output, src, strlen(src) + 1);
1331 len = strlen(output);
1332 if(len && output[len - 1] == '\"')
1333 output[len - 1] = '\0';
1337 extern unsigned int isdigit(int);
1339 double __ecereNameSpace__ecere__sys__FloatFromString(char * string)
1342 float dec = 0, res = 0;
1346 for(c = 0; string[c]; c++)
1357 else if((ch == '.') && !dec)
1359 else if(isdigit(ch))
1364 res += (float)dig / dec;
1368 res = res * (float)10 + (float)dig;
1373 return (float)neg * res;
1376 unsigned int __ecereNameSpace__ecere__sys__IsPathInsideOf(char * path, char * of)
1378 if(!path[0] || !of[0])
1382 char ofPart[274], ofRest[797];
1383 char pathPart[274], pathRest[797];
1386 strcpy(pathRest, path);
1387 for(; ofRest[0] && pathRest[0]; )
1389 __ecereNameSpace__ecere__sys__SplitDirectory(ofRest, ofPart, ofRest);
1390 __ecereNameSpace__ecere__sys__SplitDirectory(pathRest, pathPart, pathRest);
1391 if(((__ecereNameSpace__ecere__com__GetRuntimePlatform() == 1) ? (strcasecmp) : strcmp)(pathPart, ofPart))
1394 if(!ofRest[0] && !pathRest[0])
1396 else if(!pathRest[0])
1402 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__DefinedExpression;
1404 struct __ecereNameSpace__ecere__com__DefinedExpression;
1406 extern struct __ecereNameSpace__ecere__com__DefinedExpression * __ecereNameSpace__ecere__com__eSystem_RegisterDefine(char * name, char * value, struct __ecereNameSpace__ecere__com__Instance * module, int declMode);
1408 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__GlobalFunction;
1410 struct __ecereNameSpace__ecere__com__GlobalFunction;
1412 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);
1414 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);
1416 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__NameSpace;
1418 struct __ecereNameSpace__ecere__com__NameSpace
1421 struct __ecereNameSpace__ecere__com__NameSpace * btParent;
1422 struct __ecereNameSpace__ecere__com__NameSpace * left;
1423 struct __ecereNameSpace__ecere__com__NameSpace * right;
1425 struct __ecereNameSpace__ecere__com__NameSpace * parent;
1426 struct __ecereNameSpace__ecere__sys__BinaryTree nameSpaces;
1427 struct __ecereNameSpace__ecere__sys__BinaryTree classes;
1428 struct __ecereNameSpace__ecere__sys__BinaryTree defines;
1429 struct __ecereNameSpace__ecere__sys__BinaryTree functions;
1430 } __attribute__ ((gcc_struct));
1432 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Module;
1434 struct __ecereNameSpace__ecere__com__Module
1436 struct __ecereNameSpace__ecere__com__Instance * application;
1437 struct __ecereNameSpace__ecere__sys__OldList classes;
1438 struct __ecereNameSpace__ecere__sys__OldList defines;
1439 struct __ecereNameSpace__ecere__sys__OldList functions;
1440 struct __ecereNameSpace__ecere__sys__OldList modules;
1441 struct __ecereNameSpace__ecere__com__Instance * prev;
1442 struct __ecereNameSpace__ecere__com__Instance * next;
1448 struct __ecereNameSpace__ecere__com__NameSpace privateNameSpace;
1449 struct __ecereNameSpace__ecere__com__NameSpace publicNameSpace;
1450 } __attribute__ ((gcc_struct));
1452 extern struct __ecereNameSpace__ecere__com__Instance * __thisModule;
1454 extern void __ecereNameSpace__ecere__com__eEnum_AddFixedValue(struct __ecereNameSpace__ecere__com__Class * _class, char * string, int value);
1456 void __ecereRegisterModule_String(struct __ecereNameSpace__ecere__com__Instance * module)
1458 struct __ecereNameSpace__ecere__com__Class * class;
1460 __ecereNameSpace__ecere__com__eSystem_RegisterDefine("ecere::sys::DIR_SEP", "(GetRuntimePlatform() == win32) ? '\\\\' : '/'", module, 4);
1461 __ecereNameSpace__ecere__com__eSystem_RegisterDefine("ecere::sys::DIR_SEPS", "(GetRuntimePlatform() == win32) ? \"\\\\\" : \"/\"", module, 4);
1462 __ecereNameSpace__ecere__com__eSystem_RegisterDefine("ecere::sys::MAX_F_STRING", "1025", module, 4);
1463 __ecereNameSpace__ecere__com__eSystem_RegisterDefine("ecere::sys::MAX_EXTENSION", "17", module, 4);
1464 __ecereNameSpace__ecere__com__eSystem_RegisterDefine("ecere::sys::MAX_FILENAME", "274", module, 4);
1465 __ecereNameSpace__ecere__com__eSystem_RegisterDefine("ecere::sys::MAX_DIRECTORY", "534", module, 4);
1466 __ecereNameSpace__ecere__com__eSystem_RegisterDefine("ecere::sys::MAX_LOCATION", "797", module, 4);
1467 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::GetExtension", "char * ecere::sys::GetExtension(char * string, char * output)", __ecereNameSpace__ecere__sys__GetExtension, module, 4);
1468 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::StripLastDirectory", "char * ecere::sys::StripLastDirectory(char * string, char * output)", __ecereNameSpace__ecere__sys__StripLastDirectory, module, 4);
1469 __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);
1470 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::GetLastDirectory", "char * ecere::sys::GetLastDirectory(char * string, char * output)", __ecereNameSpace__ecere__sys__GetLastDirectory, module, 4);
1471 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::SplitArchivePath", "bool ecere::sys::SplitArchivePath(char * fileName, char * archiveName, char * * archiveFile)", __ecereNameSpace__ecere__sys__SplitArchivePath, module, 4);
1472 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::PathCatSlash", "char * ecere::sys::PathCatSlash(char * string, char * addedPath)", __ecereNameSpace__ecere__sys__PathCatSlash, module, 4);
1473 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::PathCat", "char * ecere::sys::PathCat(char * string, char * addedPath)", __ecereNameSpace__ecere__sys__PathCat, module, 4);
1474 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::MakePathRelative", "char * ecere::sys::MakePathRelative(char * path, char * to, char * destination)", __ecereNameSpace__ecere__sys__MakePathRelative, module, 4);
1475 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::StripExtension", "bool ecere::sys::StripExtension(char * string)", __ecereNameSpace__ecere__sys__StripExtension, module, 4);
1476 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::ChangeExtension", "char * ecere::sys::ChangeExtension(char * string, char * ext, char * output)", __ecereNameSpace__ecere__sys__ChangeExtension, module, 4);
1477 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::PrintSize", "void ecere::sys::PrintSize(char * string, uint size, int prec)", __ecereNameSpace__ecere__sys__PrintSize, module, 4);
1478 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::PrintBigSize", "void ecere::sys::PrintBigSize(char * string, double size, int prec)", __ecereNameSpace__ecere__sys__PrintBigSize, module, 4);
1479 __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);
1480 __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);
1481 class = __ecereNameSpace__ecere__com__eSystem_RegisterClass(4, "ecere::sys::BackSlashEscaping", "bool", 0, 0, 0, 0, module, 4, 1);
1482 if(((struct __ecereNameSpace__ecere__com__Module *)(((char *)module + 24)))->application == ((struct __ecereNameSpace__ecere__com__Module *)(((char *)__thisModule + 24)))->application && class)
1483 __ecereClass___ecereNameSpace__ecere__sys__BackSlashEscaping = class;
1484 __ecereNameSpace__ecere__com__eEnum_AddFixedValue(class, "forArgsPassing", 2);
1485 __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);
1486 __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);
1487 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::TrimLSpaces", "char * ecere::sys::TrimLSpaces(char * string, char * output)", __ecereNameSpace__ecere__sys__TrimLSpaces, module, 4);
1488 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::TrimRSpaces", "char * ecere::sys::TrimRSpaces(char * string, char * output)", __ecereNameSpace__ecere__sys__TrimRSpaces, module, 4);
1489 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::ChangeCh", "void ecere::sys::ChangeCh(char * string, char ch1, char ch2)", __ecereNameSpace__ecere__sys__ChangeCh, module, 4);
1490 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::RepeatCh", "void ecere::sys::RepeatCh(char * string, int count, char ch)", __ecereNameSpace__ecere__sys__RepeatCh, module, 4);
1491 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::CopyString", "char * ecere::sys::CopyString(char * string)", __ecereNameSpace__ecere__sys__CopyString, module, 4);
1492 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::GetString", "bool ecere::sys::GetString(char * * buffer, char * string, int max)", __ecereNameSpace__ecere__sys__GetString, module, 4);
1493 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::GetValue", "int ecere::sys::GetValue(char * * buffer)", __ecereNameSpace__ecere__sys__GetValue, module, 4);
1494 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::GetHexValue", "uint ecere::sys::GetHexValue(char * * buffer)", __ecereNameSpace__ecere__sys__GetHexValue, module, 4);
1495 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::StripQuotes", "char * ecere::sys::StripQuotes(char * string, char * output)", __ecereNameSpace__ecere__sys__StripQuotes, module, 4);
1496 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::FloatFromString", "double ecere::sys::FloatFromString(char * string)", __ecereNameSpace__ecere__sys__FloatFromString, module, 4);
1497 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::IsPathInsideOf", "bool ecere::sys::IsPathInsideOf(char * path, char * of)", __ecereNameSpace__ecere__sys__IsPathInsideOf, module, 4);
1500 void __ecereUnregisterModule_String(struct __ecereNameSpace__ecere__com__Instance * module)