diff -r a9d509848390 -r 4b4a043111f4 project_files/hwc/rtl/system.c --- a/project_files/hwc/rtl/system.c Tue Feb 11 22:05:03 2014 +0400 +++ b/project_files/hwc/rtl/system.c Wed Feb 12 00:50:15 2014 +0400 @@ -66,20 +66,18 @@ count = s.len + 1 - index; } - memcpy(result.s + 1, s.s + index - 1, count); + memcpy(result.s + 1, s.s + index, count); result.len = count; return result; } -void fpcrtl_delete__vars(string255 *s, SizeInt index, SizeInt count) { +void __attribute__((overloadable)) fpcrtl_delete__vars(string255 *s, SizeInt index, SizeInt count) { // number of chars to be move int num_move; int new_length; - string255 temp = *s; - if (index < 1) { // in fpc, if index < 1, the string won't be modified return; @@ -90,7 +88,6 @@ } if (count > s->len - index + 1) { - s->str[index - 1] = 0; s->len = index - 1; return; } @@ -98,13 +95,41 @@ num_move = s->len - index + 1 - count; new_length = s->len - count; - memmove(s->str + index - 1, temp.str + index - 1 + count, num_move); + memmove(s->str + index - 1, s->str + index - 1 + count, num_move); s->str[new_length] = 0; s->len = new_length; } +void __attribute__((overloadable)) fpcrtl_delete__vars(astring *s, SizeInt index, SizeInt count) { + // number of chars to be move + int num_move; + int new_length; + + if (index < 1) { + // in fpc, if index < 1, the string won't be modified + return; + } + + if(index > s->len){ + return; + } + + if (count > s->len - index + 1) { + s->len = index - 1; + return; + } + + num_move = s->len - index + 1 - count; + new_length = s->len - count; + + memmove(s->s + index, s->s + index + count, num_move); + + s->len = new_length; + +} + string255 fpcrtl_floatToStr(double n) { string255 t; sprintf(t.str, "%f", n); @@ -127,7 +152,7 @@ Integer __attribute__((overloadable)) fpcrtl_pos(string255 substr, string255 str) { - char* p; + unsigned char* p; if (str.len == 0) { return 0; @@ -146,12 +171,20 @@ return 0; } - return strlen(str.str) - strlen(p) + 1; + return p - (unsigned char*)&str.s; +} + +Integer __attribute__((overloadable)) fpcrtl_pos(Char c, astring str) { + string255 t; + t.len = 1; + t.str[0] = c; + t.str[1] = 0; + return fpcrtl_pos(t, str); } Integer __attribute__((overloadable)) fpcrtl_pos(string255 substr, astring str) { - char* p; + unsigned char* p; if (str.len == 0) { return 0; @@ -170,7 +203,7 @@ return 0; } - return str.len - strlen(p) + 1; + return p - (unsigned char *)&str.s; } Integer fpcrtl_length(string255 s) {