2 typedef long long int64;
3 typedef unsigned long long uint64;
7 #elif defined(__TINYC__)
9 #define __builtin_va_list va_list
10 #define __builtin_va_start va_start
11 #define __builtin_va_end va_end
13 #define strcasecmp stricmp
14 #define strncasecmp strnicmp
15 #define __declspec(x) __attribute__((x))
19 typedef long long int64;
20 typedef unsigned long long uint64;
22 typedef __int64 int64;
23 typedef unsigned __int64 uint64;
26 #define __ENDIAN_PAD(x) (8 - (x))
28 #define __ENDIAN_PAD(x) 0
31 extern void * __ecereNameSpace__ecere__com__eSystem_New(unsigned int size);
33 extern void * __ecereNameSpace__ecere__com__eSystem_New0(unsigned int size);
35 extern void * __ecereNameSpace__ecere__com__eSystem_Renew(void * memory, unsigned int size);
37 extern void * __ecereNameSpace__ecere__com__eSystem_Renew0(void * memory, unsigned int size);
39 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__BTNode;
41 struct __ecereNameSpace__ecere__sys__BTNode;
43 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__BinaryTree;
45 struct __ecereNameSpace__ecere__sys__BinaryTree
47 struct __ecereNameSpace__ecere__sys__BTNode * root;
49 int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, uintptr_t a, uintptr_t b);
50 void (* FreeKey)(void * key);
51 } __attribute__ ((gcc_struct));
53 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__OldList;
55 struct __ecereNameSpace__ecere__sys__OldList
62 } __attribute__ ((gcc_struct));
64 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Class;
66 struct __ecereNameSpace__ecere__com__Class
68 struct __ecereNameSpace__ecere__com__Class * prev;
69 struct __ecereNameSpace__ecere__com__Class * next;
75 int (* Constructor)(struct __ecereNameSpace__ecere__com__Instance *);
76 void (* Destructor)(struct __ecereNameSpace__ecere__com__Instance *);
79 struct __ecereNameSpace__ecere__com__Class * base;
80 struct __ecereNameSpace__ecere__sys__BinaryTree methods;
81 struct __ecereNameSpace__ecere__sys__BinaryTree members;
82 struct __ecereNameSpace__ecere__sys__BinaryTree prop;
83 struct __ecereNameSpace__ecere__sys__OldList membersAndProperties;
84 struct __ecereNameSpace__ecere__sys__BinaryTree classProperties;
85 struct __ecereNameSpace__ecere__sys__OldList derivatives;
89 struct __ecereNameSpace__ecere__com__Instance * module;
90 struct __ecereNameSpace__ecere__com__NameSpace * nameSpace;
91 char * dataTypeString;
92 struct __ecereNameSpace__ecere__com__Instance * dataType;
95 void (* Initialize)();
97 struct __ecereNameSpace__ecere__sys__OldList selfWatchers;
99 unsigned int noExpansion;
100 char * defaultProperty;
101 unsigned int comRedefinition;
103 unsigned int isRemote;
104 unsigned int internalDecl;
106 unsigned int computeSize;
108 int destructionWatchOffset;
110 struct __ecereNameSpace__ecere__sys__OldList delayedCPValues;
111 int inheritanceAccess;
114 struct __ecereNameSpace__ecere__sys__OldList conversions;
115 struct __ecereNameSpace__ecere__sys__OldList templateParams;
116 struct __ecereNameSpace__ecere__com__ClassTemplateArgument * templateArgs;
117 struct __ecereNameSpace__ecere__com__Class * templateClass;
118 struct __ecereNameSpace__ecere__sys__OldList templatized;
120 } __attribute__ ((gcc_struct));
122 extern long long __ecereNameSpace__ecere__com__eClass_GetProperty(struct __ecereNameSpace__ecere__com__Class * _class, char * name);
124 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Instance;
126 struct __ecereNameSpace__ecere__com__Instance
129 struct __ecereNameSpace__ecere__com__Class * _class;
131 } __attribute__ ((gcc_struct));
133 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Property;
135 struct __ecereNameSpace__ecere__com__Property
137 struct __ecereNameSpace__ecere__com__Property * prev;
138 struct __ecereNameSpace__ecere__com__Property * next;
140 unsigned int isProperty;
143 struct __ecereNameSpace__ecere__com__Class * _class;
144 char * dataTypeString;
145 struct __ecereNameSpace__ecere__com__Class * dataTypeClass;
146 struct __ecereNameSpace__ecere__com__Instance * dataType;
147 void (* Set)(void * , int);
148 int (* Get)(void * );
149 unsigned int (* IsSet)(void * );
153 unsigned int conversion;
154 unsigned int watcherOffset;
156 unsigned int compiled;
157 unsigned int selfWatchable;
158 unsigned int isWatchable;
159 } __attribute__ ((gcc_struct));
161 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__DataMember;
163 struct __ecereNameSpace__ecere__com__DataMember
165 struct __ecereNameSpace__ecere__com__DataMember * prev;
166 struct __ecereNameSpace__ecere__com__DataMember * next;
168 unsigned int isProperty;
171 struct __ecereNameSpace__ecere__com__Class * _class;
172 char * dataTypeString;
173 struct __ecereNameSpace__ecere__com__Class * dataTypeClass;
174 struct __ecereNameSpace__ecere__com__Instance * dataType;
178 struct __ecereNameSpace__ecere__sys__OldList members;
179 struct __ecereNameSpace__ecere__sys__BinaryTree membersAlpha;
182 } __attribute__ ((gcc_struct));
184 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Method;
186 struct __ecereNameSpace__ecere__com__Method
189 struct __ecereNameSpace__ecere__com__Method * parent;
190 struct __ecereNameSpace__ecere__com__Method * left;
191 struct __ecereNameSpace__ecere__com__Method * right;
196 struct __ecereNameSpace__ecere__com__Class * _class;
198 char * dataTypeString;
199 struct __ecereNameSpace__ecere__com__Instance * dataType;
201 } __attribute__ ((gcc_struct));
203 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__SerialBuffer;
205 struct __ecereNameSpace__ecere__com__SerialBuffer
207 unsigned char * _buffer;
211 } __attribute__ ((gcc_struct));
213 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__DataValue;
215 struct __ecereNameSpace__ecere__com__DataValue
230 } __attribute__ ((gcc_struct));
231 } __attribute__ ((gcc_struct));
233 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__ClassTemplateArgument;
235 struct __ecereNameSpace__ecere__com__ClassTemplateArgument
241 char * dataTypeString;
242 struct __ecereNameSpace__ecere__com__Class * dataTypeClass;
243 } __attribute__ ((gcc_struct));
244 struct __ecereNameSpace__ecere__com__DataValue expression;
250 struct __ecereNameSpace__ecere__com__DataMember * member;
251 struct __ecereNameSpace__ecere__com__Property * prop;
252 struct __ecereNameSpace__ecere__com__Method * method;
253 } __attribute__ ((gcc_struct));
254 } __attribute__ ((gcc_struct));
255 } __attribute__ ((gcc_struct));
256 } __attribute__ ((gcc_struct));
258 typedef uintptr_t size_t;
260 void exit(int status);
262 void * calloc(size_t nmemb, size_t size);
264 void free(void * ptr);
266 void * malloc(size_t size);
268 void * realloc(void * ptr, size_t size);
270 long int strtol(const char * nptr, char ** endptr, int base);
272 long long int strtoll(const char * nptr, char ** endptr, int base);
274 unsigned long long int strtoull(const char * nptr, char ** endptr, int base);
276 extern int runtimePlatform;
285 extern int strlen(const char * );
287 extern char * strcpy(char * , const char * );
289 char * __ecereNameSpace__ecere__sys__GetExtension(char * string, char * output)
293 int len = strlen(string);
294 int limit = (__simpleStruct0 = len - (17), (0 > __simpleStruct0) ? 0 : __simpleStruct0);
297 for(c = len; c >= limit; c--)
303 strcpy(output, string + c + 1);
306 else if(ch == '/' || ch == '\\')
312 extern int strcmp(const char * , const char * );
314 extern void * memmove(void * , const void * , unsigned int size);
316 extern int __ecereNameSpace__ecere__com__GetRuntimePlatform(void);
318 char * __ecereNameSpace__ecere__sys__StripLastDirectory(char * string, char * output)
322 if(runtimePlatform == 1 && !strcmp(string, "\\\\"))
329 int len = strlen(string);
331 for(c = len - 2; c >= 0; c--)
332 if(string[c] == '/' || string[c] == '\\')
334 else if(string[c] == '>' || (string[c] == ':' && c == 0))
339 if((runtimePlatform == 1) ? (c >= 0) : (c > 0))
341 memmove(output, string, c);
344 if(runtimePlatform == 1 && c == 1 && output[0] == '\\' && output[1] == '\\')
350 strcpy(output, ((__ecereNameSpace__ecere__com__GetRuntimePlatform() == 1) ? "\\" : "/"));
357 strcpy(output, ((__ecereNameSpace__ecere__com__GetRuntimePlatform() == 1) ? "\\" : "/"));
363 return (((void *)0));
369 char * __ecereNameSpace__ecere__sys__SplitDirectory(const char * string, char * part, char * rest)
375 for(; (ch = string[c]) && (ch == '/' || ch == '\\'); c++)
378 part[len++] = ((__ecereNameSpace__ecere__com__GetRuntimePlatform() == 1) ? '\\' : '/');
381 for(; (ch = string[c]) && (ch != '/' && ch != '\\'); c++)
387 for(; (ch = string[c]) && (ch == '/' || ch == '\\'); c++)
389 memmove(rest, string + c, strlen(string + c) + 1);
390 for(c = strlen(rest); c >= 0; c--)
391 if(ch != '/' && ch != '\\')
399 char * __ecereNameSpace__ecere__sys__GetLastDirectory(char * string, char * output)
402 int len = string ? strlen(string) : 0;
404 for(c = len - 2; c >= 0; c--)
405 if(string[c] == '/' || string[c] == '\\' || string[c] == ':' || string[c] == '>')
409 memmove(output, string + c, strlen(string + c) + 1);
412 len = strlen(output);
413 if(len > 1 && (output[len - 1] == '\\' || output[len - 1] == '/'))
414 output[len - 1] = '\0';
418 extern char * strncpy(char * , const char * , int n);
420 unsigned int __ecereNameSpace__ecere__sys__SplitArchivePath(char * fileName, char * archiveName, char ** archiveFile)
422 if(fileName[0] == '<')
424 int c = strlen(fileName);
426 for(; c > 0 && fileName[c] != '>'; c--)
430 strncpy(archiveName, fileName + 1, c - 1);
431 archiveName[c - 1] = '\0';
432 *archiveFile = fileName + c + 1;
436 else if(fileName[0] == ':')
438 strcpy(archiveName, ":");
439 *archiveFile = fileName + 1;
445 extern char * strstr(char * , const char * );
447 extern int toupper(int);
449 extern char * strcat(char * , const char * );
451 extern int sprintf(char * , char * , ...);
453 char * __ecereNameSpace__ecere__sys__PathCatSlash(char * string, char * addedPath)
455 unsigned int modified = 0x0;
459 char fileName[797] = "", archiveName[797] = "", * file;
461 unsigned int isURL = 0x0;
464 if(__ecereNameSpace__ecere__sys__SplitArchivePath(string, archiveName, &file))
465 strcpy(fileName, file);
468 strcpy(fileName, string);
470 if(strstr(string, "http://") == string)
472 char * slash = strstr(fileName + 7, "/");
478 urlFileName = fileName + strlen(fileName);
480 if(strstr(addedPath, "http://") == addedPath)
482 strcpy(fileName, "http://");
486 else if(__ecereNameSpace__ecere__com__GetRuntimePlatform() == 1)
488 if(addedPath[0] && addedPath[1] == ':' && addedPath[0] != '<')
490 fileName[0] = (char)toupper(addedPath[0]);
496 else if(addedPath[0] == '\\' && addedPath[1] == '\\')
498 fileName[0] = fileName[1] = '\\';
504 if(!modified && isURL && (addedPath[0] == '\\' || addedPath[0] == '/'))
506 urlFileName[0] = '/';
507 urlFileName[1] = '\0';
509 else if(!modified && (addedPath[0] == '\\' || addedPath[0] == '/'))
511 if(__ecereNameSpace__ecere__com__GetRuntimePlatform() == 1)
513 if(addedPath[0] == '/' && !addedPath[1])
515 fileName[0] = addedPath[0];
519 else if(fileName[0] && fileName[1] == ':')
539 for(; addedPath[c]; )
541 char directory[4384LL];
546 for(; (ch = addedPath[c]) && (ch == '/' || ch == '\\'); c++)
548 for(; (ch = addedPath[c]) && (ch != '/' && ch != '\\'); c++)
550 if(isURL && ch == '?')
555 directory[len++] = ch;
557 directory[len] = '\0';
558 for(count = len - 1; count >= 0 && (directory[count] == ' ' || directory[count] == '\t'); count--)
560 directory[count] = '\0';
566 if(strstr(directory, "..") == directory && (!directory[2] || directory[2] == ((__ecereNameSpace__ecere__com__GetRuntimePlatform() == 1) ? '\\' : '/') || directory[2] == '/'))
568 int strLen = strlen(fileName) - 1;
572 for(; (ch = fileName[strLen]) && strLen > -1 && (ch == '/' || ch == '\\'); strLen--)
574 for(; (ch = fileName[strLen]) && strLen > -1 && (ch != '/' && ch != '\\' && ch != ':'); strLen--)
576 for(; (ch = fileName[strLen]) && strLen > -1 && (ch == '/' || ch == '\\'); strLen--)
582 strLen = (__simpleStruct0 = urlFileName - fileName, (strLen > __simpleStruct0) ? strLen : __simpleStruct0);
584 if(!strcmp(fileName + strLen + 1, ".."))
586 strcat(fileName, "/");
587 strcat(fileName, "..");
591 if(__ecereNameSpace__ecere__com__GetRuntimePlatform() == 1)
593 if(!strLen && fileName[0] == '\\' && fileName[1] == '\\')
596 return (((void *)0));
605 fileName[strLen + 1] = '\0';
609 fileName[strLen + 1] = '\0';
621 strcpy(fileName, "..");
624 else if(strcmp(directory, "."))
626 int strLen = strlen(fileName);
627 unsigned int notZeroLen = strLen > 0;
629 if(strLen > 0 && (fileName[strLen - 1] == '/' || fileName[strLen - 1] == '\\'))
632 fileName[strLen++] = '/';
633 fileName[strLen] = '\0';
634 if(strLen + strlen(directory) > (797) - 3)
635 return (((void *)0));
636 strcat(fileName, directory);
639 if(isURL && ch == '/')
640 strcat(fileName, "/");
641 if(isURL && ch == '?')
643 strcat(fileName, addedPath + c);
648 sprintf(string, "<%s>%s", archiveName, fileName);
650 strcpy(string, fileName);
652 return modified ? string : (((void *)0));
655 char * __ecereNameSpace__ecere__sys__PathCat(char * string, char * addedPath)
657 unsigned int modified = 0x0;
661 char fileName[797] = "", archiveName[797] = "", * file;
663 unsigned int isURL = 0x0;
666 if(__ecereNameSpace__ecere__sys__SplitArchivePath(string, archiveName, &file))
667 strcpy(fileName, file);
670 strcpy(fileName, string);
672 if(strstr(string, "http://") == string)
674 char * slash = strstr(fileName + 7, "/");
680 urlFileName = fileName + strlen(fileName);
682 if(strstr(addedPath, "http://") == addedPath)
684 strcpy(fileName, "http://");
688 else if(runtimePlatform == 1)
690 if(addedPath[0] && addedPath[1] == ':' && addedPath[0] != '<')
692 fileName[0] = (char)toupper(addedPath[0]);
698 else if(addedPath[0] == '\\' && addedPath[1] == '\\')
700 fileName[0] = fileName[1] = '\\';
705 else if(fileName[0] == '/' && !archiveName[0] && strcmp(addedPath, "/"))
706 return (((void *)0));
708 if(!modified && isURL && (addedPath[0] == '\\' || addedPath[0] == '/'))
710 urlFileName[0] = '/';
711 urlFileName[1] = '\0';
713 else if(!modified && (addedPath[0] == '\\' || addedPath[0] == '/'))
715 if(runtimePlatform == 1)
717 if(addedPath[0] == '/' && !addedPath[1])
719 fileName[0] = addedPath[0];
723 else if(fileName[0] && fileName[1] == ':')
743 for(; addedPath[c]; )
745 char directory[4384LL];
750 for(; (ch = addedPath[c]) && (ch == '/' || ch == '\\'); c++)
752 for(; (ch = addedPath[c]) && (ch != '/' && ch != '\\'); c++)
754 if(isURL && ch == '?')
759 directory[len++] = ch;
761 directory[len] = '\0';
762 for(count = len - 1; count >= 0 && (directory[count] == ' ' || directory[count] == '\t'); count--)
764 directory[count] = '\0';
770 if(strstr(directory, "..") == directory && (!directory[2] || directory[2] == ((__ecereNameSpace__ecere__com__GetRuntimePlatform() == 1) ? '\\' : '/')))
772 int strLen = strlen(fileName) - 1;
776 unsigned int separator = 0x0;
778 for(; (ch = fileName[strLen]) && strLen > -1 && (ch == '/' || ch == '\\'); strLen--)
780 for(; (ch = fileName[strLen]) && strLen > -1 && (ch != '/' && ch != '\\' && ch != ':'); strLen--)
782 for(; (ch = fileName[strLen]) && strLen > -1 && (ch == '/' || ch == '\\'); strLen--)
788 strLen = (__simpleStruct0 = urlFileName - fileName, (strLen > __simpleStruct0) ? strLen : __simpleStruct0);
790 if(!strcmp(fileName + strLen + (separator ? 2 : 1), ".."))
792 strcat(fileName, ((__ecereNameSpace__ecere__com__GetRuntimePlatform() == 1) ? "\\" : "/"));
793 strcat(fileName, "..");
797 if(runtimePlatform == 1)
799 if(!strLen && fileName[0] == '\\' && fileName[1] == '\\')
802 return (((void *)0));
811 fileName[strLen + 1] = '\0';
815 fileName[strLen + 1] = '\0';
827 strcpy(fileName, "..");
830 else if(strcmp(directory, "."))
832 int strLen = strlen(fileName);
833 unsigned int notZeroLen = strLen > 0;
835 if(strLen > 0 && (fileName[strLen - 1] == '/' || fileName[strLen - 1] == '\\'))
840 fileName[strLen++] = '/';
842 fileName[strLen++] = ((__ecereNameSpace__ecere__com__GetRuntimePlatform() == 1) ? '\\' : '/');
844 fileName[strLen] = '\0';
845 if(strLen + strlen(directory) > (797) - 3)
846 return (((void *)0));
847 strcat(fileName, directory);
850 if(isURL && ch == '/')
851 strcat(fileName, "/");
852 if(isURL && ch == '?')
854 strcat(fileName, addedPath + c);
859 sprintf(string, "<%s>%s", archiveName, fileName);
861 strcpy(string, fileName);
863 return modified ? string : (((void *)0));
866 extern int strcasecmp(const char * , const char * );
868 char * __ecereNameSpace__ecere__sys__MakePathRelative(char * path, char * to, char * destination)
871 memmove(destination, path, strlen(path) + 1);
874 char pathPart[4384LL], pathRest[797];
875 char toPart[4384LL], toRest[797];
876 unsigned int different = 0x0;
878 strcpy(pathRest, path);
880 destination[0] = '\0';
883 __ecereNameSpace__ecere__sys__SplitDirectory(toRest, toPart, toRest);
885 __ecereNameSpace__ecere__sys__SplitDirectory(pathRest, pathPart, pathRest);
886 if(different || ((__ecereNameSpace__ecere__com__GetRuntimePlatform() == 1) ? (strcasecmp) : strcmp)(toPart, pathPart))
889 strcat(destination, "..");
890 strcat(destination, ((__ecereNameSpace__ecere__com__GetRuntimePlatform() == 1) ? "\\" : "/"));
894 __ecereNameSpace__ecere__sys__PathCat(destination, pathPart);
897 __ecereNameSpace__ecere__sys__SplitDirectory(pathRest, pathPart, pathRest);
898 __ecereNameSpace__ecere__sys__PathCat(destination, pathPart);
904 unsigned int __ecereNameSpace__ecere__sys__StripExtension(char * string)
908 for(c = strlen(string); c >= 0; c--)
914 else if(string[c] == '\\' || string[c] == '/')
919 char * __ecereNameSpace__ecere__sys__ChangeExtension(char * string, char * ext, char * output)
922 strcpy(output, string);
923 __ecereNameSpace__ecere__sys__StripExtension(output);
930 void __ecereNameSpace__ecere__sys__PrintSize(char * string, unsigned int size, int prec)
936 sprintf(format, "%%.0%df", prec);
937 if(size > 1024 * 1024 * 1024)
939 sprintf(string, format, (float)size / (float)((float)(float)(1024 * 1024 * 1024)));
940 strcat(string, " GB");
942 else if(size > 1024 * 1024)
944 sprintf(string, format, (float)size / (float)((float)(float)(1024 * 1024)));
945 strcat(string, " MB");
949 sprintf(string, format, (float)size / (float)(float)1024);
950 strcat(string, " KB");
954 sprintf(string, "%d B", size);
957 void __ecereNameSpace__ecere__sys__PrintBigSize(char * string, double size, int prec)
959 if(size > (double)1024)
963 sprintf(format, "%%.0%df", prec);
964 if(size > 1024.0 * 1024.0 * 1024.0 * 1024.0)
966 sprintf(string, format, size / ((double)(double)(1024 * 1024) * 1024.0 * 1024.0));
967 strcat(string, " TB");
969 else if(size > 1024.0 * 1024.0 * 1024.0)
971 sprintf(string, format, size / (1024.0 * 1024.0 * 1024.0));
972 strcat(string, " GB");
974 else if(size > 1024.0 * 1024.0)
976 sprintf(string, format, size / (1024.0 * 1024.0));
977 strcat(string, " MB");
981 sprintf(string, format, size / 1024.0);
982 strcat(string, " KB");
986 sprintf(string, "%.0f B", size);
989 extern int strncmp(const char * , const char * , int n);
991 extern int strncasecmp(const char * , const char * , int n);
993 extern int tolower(int);
995 extern int isalnum(int c);
997 char * __ecereNameSpace__ecere__sys__SearchString(char * buffer, int start, char * subStr, unsigned int matchCase, unsigned int matchWord)
1002 char * strBuffer = buffer + start;
1003 int subLen = strlen(subStr);
1004 char beforeChar = start ? *(strBuffer - 1) : (char)0;
1005 int (* strcompare)(const char *, const char *, unsigned int) = matchCase ? strncmp : (strncasecmp);
1007 for(ptr = strBuffer; *ptr; ptr++)
1009 if(matchCase ? (*subStr == *ptr) : (tolower(*subStr) == tolower(*ptr)))
1013 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)))))
1018 if(!strcompare(ptr, subStr, subLen))
1022 beforeChar = ptr[0];
1025 return (((void *)0));
1028 char * __ecereNameSpace__ecere__sys__RSearchString(char * buffer, char * subStr, int maxLen, unsigned int matchCase, unsigned int matchWord)
1030 if(buffer && subStr)
1032 int subLen = strlen(subStr);
1033 char * ptr1 = buffer + maxLen - subLen;
1034 char * ptr2 = buffer + maxLen - subLen - 1;
1035 int (* strcompare)(const char *, const char *, unsigned int) = matchCase ? strncmp : (strncasecmp);
1037 for(; ptr1 >= buffer; ptr1--, ptr2--)
1039 if(tolower(*subStr) == tolower(*ptr1))
1043 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)))))
1048 if(!strcompare(ptr1, subStr, subLen))
1054 return (((void *)0));
1057 int __ecereNameSpace__ecere__sys__Tokenize(char * string, int maxTokens, char * tokens[], unsigned int escapeBackSlashes)
1060 unsigned int quoted = 0x0;
1061 unsigned char * start = (((void *)0));
1062 unsigned int escaped = 0x0;
1063 char * output = string;
1065 for(; *string && count < maxTokens; string++, output++)
1067 if(output != string)
1075 if(output != string)
1078 else if(escapeBackSlashes && *string == '\\')
1080 else if(*string == '\"')
1089 memmove(start + 1, start, string - (char *)start);
1093 else if(*string == ' ' && !quoted)
1095 tokens[count++] = start;
1097 start = (((void *)0));
1100 else if(*string != ' ')
1110 if(*string == '\\' && escapeBackSlashes)
1115 if(start && count < maxTokens)
1117 tokens[count++] = start;
1123 extern char * strchr(char * , int);
1125 int __ecereNameSpace__ecere__sys__TokenizeWith(char * string, int maxTokens, char * tokens[], char * tokenizers, unsigned int escapeBackSlashes)
1128 unsigned int quoted = 0x0;
1129 unsigned char * start = (((void *)0));
1130 unsigned int escaped = 0x0;
1131 char * output = string;
1132 unsigned int quotedFromStart = 0x0;
1134 for(; *string && count < maxTokens; string++, output++)
1136 if(output != string)
1144 if(output != string)
1147 else if(escapeBackSlashes && *string == '\\')
1149 else if(*string == '\"')
1155 quotedFromStart = 0x0;
1161 else if(strchr(tokenizers, *string) && !quoted)
1163 tokens[count++] = start;
1165 start = (((void *)0));
1168 else if(!strchr(tokenizers, *string))
1172 quotedFromStart = 0x1;
1179 if(*string == '\\' && escapeBackSlashes)
1184 if(start && count < maxTokens)
1186 tokens[count++] = start;
1192 char * __ecereNameSpace__ecere__sys__TrimLSpaces(char * string, char * output)
1196 for(c = 0; string[c] && string[c] == ' '; c++)
1198 memmove(output, string + c, strlen(string + c) + 1);
1202 char * __ecereNameSpace__ecere__sys__TrimRSpaces(char * string, char * output)
1206 for(c = strlen(string) - 1; c >= 0 && string[c] == ' '; c--)
1210 memmove(output, string, c + 1);
1211 output[c + 1] = '\0';
1218 void __ecereNameSpace__ecere__sys__ChangeCh(char * string, char ch1, char ch2)
1222 for(c = 0; string[c]; c++)
1223 if(string[c] == ch1)
1227 void __ecereNameSpace__ecere__sys__RepeatCh(char * string, int count, char ch)
1231 for(c = 0; c < count; c++)
1233 string[c] = (char)0;
1236 extern void * memcpy(void * , const void * , unsigned int size);
1238 char * __ecereNameSpace__ecere__sys__CopyString(char * string)
1242 int len = strlen(string);
1243 char * destination = __ecereNameSpace__ecere__com__eSystem_New(sizeof(char) * (len + 1));
1246 memcpy(destination, string, len + 1);
1250 return (((void *)0));
1253 unsigned int __ecereNameSpace__ecere__sys__GetString(char ** buffer, char * string, int max)
1257 unsigned int quoted = 0x0;
1258 unsigned int result = 0x1;
1262 string[0] = (char)0;
1267 if(!(ch = *((*buffer)++)))
1269 if((ch != '\n') && (ch != '\r') && (ch != ' ') && (ch != ',') && (ch != '\t'))
1276 for(c = 0; c < max - 1; c++)
1278 if(!quoted && ((ch == '\n') || (ch == '\r') || (ch == ' ') || (ch == ',') || (ch == '\t')))
1285 quoted ^= (unsigned int)1;
1290 if(!(ch = *(*buffer)))
1297 string[c] = (char)0;
1302 extern int atoi(const char * );
1304 int __ecereNameSpace__ecere__sys__GetValue(char ** buffer)
1308 __ecereNameSpace__ecere__sys__GetString(buffer, string, 20);
1309 return atoi(string);
1312 extern unsigned long strtoul(const char * nptr, char * * endptr, int base);
1314 unsigned int __ecereNameSpace__ecere__sys__GetHexValue(char ** buffer)
1318 __ecereNameSpace__ecere__sys__GetString(buffer, string, 20);
1319 return strtoul(string, (((void *)0)), 16);
1322 char * __ecereNameSpace__ecere__sys__StripQuotes(char * string, char * output)
1325 char * src = (string[0] == '\"') ? (string + 1) : string;
1327 memmove(output, src, strlen(src) + 1);
1328 len = strlen(output);
1329 if(len && output[len - 1] == '\"')
1330 output[len - 1] = '\0';
1334 extern unsigned int isdigit(int);
1336 double __ecereNameSpace__ecere__sys__FloatFromString(char * string)
1339 float dec = (float)0, res = (float)0;
1343 for(c = 0; string[c]; c++)
1354 else if((ch == '.') && !dec)
1356 else if(isdigit(ch))
1361 res += (float)dig / dec;
1365 res = res * (float)10 + (float)dig;
1370 return (float)neg * res;
1373 unsigned int __ecereNameSpace__ecere__sys__IsPathInsideOf(char * path, char * of)
1375 if(!path[0] || !of[0])
1379 char ofPart[274], ofRest[797];
1380 char pathPart[274], pathRest[797];
1383 strcpy(pathRest, path);
1384 for(; ofRest[0] && pathRest[0]; )
1386 __ecereNameSpace__ecere__sys__SplitDirectory(ofRest, ofPart, ofRest);
1387 __ecereNameSpace__ecere__sys__SplitDirectory(pathRest, pathPart, pathRest);
1388 if(((__ecereNameSpace__ecere__com__GetRuntimePlatform() == 1) ? (strcasecmp) : strcmp)(pathPart, ofPart))
1391 if(!ofRest[0] && !pathRest[0])
1393 else if(!pathRest[0])
1399 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__DefinedExpression;
1401 struct __ecereNameSpace__ecere__com__DefinedExpression;
1403 extern struct __ecereNameSpace__ecere__com__DefinedExpression * __ecereNameSpace__ecere__com__eSystem_RegisterDefine(char * name, char * value, struct __ecereNameSpace__ecere__com__Instance * module, int declMode);
1405 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__GlobalFunction;
1407 struct __ecereNameSpace__ecere__com__GlobalFunction;
1409 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);
1411 void __ecereRegisterModule_String(struct __ecereNameSpace__ecere__com__Instance * module)
1413 struct __ecereNameSpace__ecere__com__Class * class;
1415 __ecereNameSpace__ecere__com__eSystem_RegisterDefine("ecere::sys::DIR_SEP", "(GetRuntimePlatform() == win32) ? '\\\\' : '/'", module, 4);
1416 __ecereNameSpace__ecere__com__eSystem_RegisterDefine("ecere::sys::DIR_SEPS", "(GetRuntimePlatform() == win32) ? \"\\\\\" : \"/\"", module, 4);
1417 __ecereNameSpace__ecere__com__eSystem_RegisterDefine("ecere::sys::MAX_F_STRING", "1025", module, 4);
1418 __ecereNameSpace__ecere__com__eSystem_RegisterDefine("ecere::sys::MAX_EXTENSION", "17", module, 4);
1419 __ecereNameSpace__ecere__com__eSystem_RegisterDefine("ecere::sys::MAX_FILENAME", "274", module, 4);
1420 __ecereNameSpace__ecere__com__eSystem_RegisterDefine("ecere::sys::MAX_DIRECTORY", "534", module, 4);
1421 __ecereNameSpace__ecere__com__eSystem_RegisterDefine("ecere::sys::MAX_LOCATION", "797", module, 4);
1422 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::GetExtension", "char * ecere::sys::GetExtension(char * string, char * output)", __ecereNameSpace__ecere__sys__GetExtension, module, 4);
1423 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::StripLastDirectory", "char * ecere::sys::StripLastDirectory(char * string, char * output)", __ecereNameSpace__ecere__sys__StripLastDirectory, module, 4);
1424 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::SplitDirectory", "char * ecere::sys::SplitDirectory(char * string, char * part, char * rest)", __ecereNameSpace__ecere__sys__SplitDirectory, module, 4);
1425 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::GetLastDirectory", "char * ecere::sys::GetLastDirectory(char * string, char * output)", __ecereNameSpace__ecere__sys__GetLastDirectory, module, 4);
1426 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::SplitArchivePath", "bool ecere::sys::SplitArchivePath(char * fileName, char * archiveName, char * * archiveFile)", __ecereNameSpace__ecere__sys__SplitArchivePath, module, 4);
1427 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::PathCatSlash", "char * ecere::sys::PathCatSlash(char * string, char * addedPath)", __ecereNameSpace__ecere__sys__PathCatSlash, module, 4);
1428 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::PathCat", "char * ecere::sys::PathCat(char * string, char * addedPath)", __ecereNameSpace__ecere__sys__PathCat, module, 4);
1429 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::MakePathRelative", "char * ecere::sys::MakePathRelative(char * path, char * to, char * destination)", __ecereNameSpace__ecere__sys__MakePathRelative, module, 4);
1430 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::StripExtension", "bool ecere::sys::StripExtension(char * string)", __ecereNameSpace__ecere__sys__StripExtension, module, 4);
1431 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::ChangeExtension", "char * ecere::sys::ChangeExtension(char * string, char * ext, char * output)", __ecereNameSpace__ecere__sys__ChangeExtension, module, 4);
1432 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::PrintSize", "void ecere::sys::PrintSize(char * string, uint size, int prec)", __ecereNameSpace__ecere__sys__PrintSize, module, 4);
1433 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::PrintBigSize", "void ecere::sys::PrintBigSize(char * string, double size, int prec)", __ecereNameSpace__ecere__sys__PrintBigSize, module, 4);
1434 __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);
1435 __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);
1436 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::Tokenize", "int ecere::sys::Tokenize(char * string, int maxTokens, char * tokens[], bool escapeBackSlashes)", __ecereNameSpace__ecere__sys__Tokenize, module, 4);
1437 __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);
1438 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::TrimLSpaces", "char * ecere::sys::TrimLSpaces(char * string, char * output)", __ecereNameSpace__ecere__sys__TrimLSpaces, module, 4);
1439 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::TrimRSpaces", "char * ecere::sys::TrimRSpaces(char * string, char * output)", __ecereNameSpace__ecere__sys__TrimRSpaces, module, 4);
1440 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::ChangeCh", "void ecere::sys::ChangeCh(char * string, char ch1, char ch2)", __ecereNameSpace__ecere__sys__ChangeCh, module, 4);
1441 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::RepeatCh", "void ecere::sys::RepeatCh(char * string, int count, char ch)", __ecereNameSpace__ecere__sys__RepeatCh, module, 4);
1442 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::CopyString", "char * ecere::sys::CopyString(char * string)", __ecereNameSpace__ecere__sys__CopyString, module, 4);
1443 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::GetString", "bool ecere::sys::GetString(char * * buffer, char * string, int max)", __ecereNameSpace__ecere__sys__GetString, module, 4);
1444 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::GetValue", "int ecere::sys::GetValue(char * * buffer)", __ecereNameSpace__ecere__sys__GetValue, module, 4);
1445 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::GetHexValue", "uint ecere::sys::GetHexValue(char * * buffer)", __ecereNameSpace__ecere__sys__GetHexValue, module, 4);
1446 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::StripQuotes", "char * ecere::sys::StripQuotes(char * string, char * output)", __ecereNameSpace__ecere__sys__StripQuotes, module, 4);
1447 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::FloatFromString", "double ecere::sys::FloatFromString(char * string)", __ecereNameSpace__ecere__sys__FloatFromString, module, 4);
1448 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::sys::IsPathInsideOf", "bool ecere::sys::IsPathInsideOf(char * path, char * of)", __ecereNameSpace__ecere__sys__IsPathInsideOf, module, 4);
1451 void __ecereUnregisterModule_String(struct __ecereNameSpace__ecere__com__Instance * module)